WSACleanup, fonction (winsock2.h)
La fonction WSACleanup met fin à l’utilisation de la DLL Winsock 2 (Ws2_32.dll).
Syntaxe
int WSAAPI WSACleanup();
Valeur de retour
La valeur de retour est zéro si l’opération a réussi. Sinon, la valeur SOCKET_ERROR est retournée et un numéro d’erreur spécifique peut être récupéré en appelant WSAGetLastError.
Dans un environnement multithread, WSACleanup met fin aux opérations Windows Sockets pour tous les threads.
Code d'erreur | Signification |
---|---|
Un appel WSAStartup réussi doit se produire avant d’utiliser cette fonction. | |
Le sous-système réseau a échoué. | |
Un appel Windows Sockets 1.1 bloquant est en cours ou le fournisseur de services traite toujours une fonction de rappel. |
Remarques
Une application ou une DLL est nécessaire pour effectuer un appel WSAStartup réussi avant de pouvoir utiliser les services Windows Sockets. Une fois l’utilisation des sockets Windows terminée, l’application ou la DLL doit appeler WSACleanup pour se désinscrire d’une implémentation Windows Sockets et autoriser l’implémentation à libérer toutes les ressources allouées pour le compte de l’application ou de la DLL.
Lorsque WSACleanup est appelé, tous les appels windows sockets bloquants ou asynchrones en attente émis par n’importe quel thread de ce processus sont annulés sans publier de messages de notification ou sans signaler d’objets d’événement. Toutes les opérations d’envoi ou de réception en attente qui se chevauchent (WSASend, WSASendTo, WSARecv ou WSARecvFrom avec un socket superposé, par exemple) émises par un thread de ce processus sont également annulées sans définir l’objet événement ou appeler la routine d’achèvement, le cas échéant. Dans ce cas, les opérations en attente qui se chevauchent échouent avec l’erreur status WSA_OPERATION_ABORTED.
Les sockets qui étaient ouverts lors de l’appel de WSACleanup sont réinitialisés et libérés automatiquement comme si closesocket était appelé. Les sockets qui ont été fermés avec closesocket mais qui ont encore des données en attente à envoyer peuvent être affectés lorsque WSACleanup est appelé. Dans ce cas, les données en attente peuvent être perdues si le WS2_32.DLL est déchargé de la mémoire lorsque l’application se ferme. Pour s’assurer que toutes les données en attente sont envoyées, une application doit utiliser l’arrêt pour fermer la connexion, puis attendre que la fermeture se termine avant d’appeler closesocket et WSACleanup. Toutes les ressources et l’état interne, tels que les messages non postés ou publiés en file d’attente, doivent être libérés afin d’être disponibles pour l’utilisateur suivant.
Il doit y avoir un appel à WSACleanup pour chaque appel réussi à WSAStartup. Seul l’appel de fonction WSACleanup final effectue le nettoyage réel. Les appels précédents décrémentent simplement un nombre de références internes dans le WS2_32.DLL.
La fonction WSACleanup entraîne généralement le déchargement des DLL d’assistance spécifiques au protocole. Par conséquent, la fonction WSACleanup ne doit pas être appelée à partir de la fonction DllMain dans une DLL d’application. Cela peut entraîner des interblocages. Pour plus d’informations, consultez la fonction principale DE DLL.
Windows Phone 8 : cette fonction est prise en charge pour les applications Windows Phone Store sur Windows Phone 8 et versions ultérieures.
Windows 8.1 et Windows Server 2012 R2 : cette fonction est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8.1, Windows Vista [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | winsock2.h (inclure Winsock2.h) |
Bibliothèque | Ws2_32.lib |
DLL | Ws2_32.dll |