Fonction WSACleanup (winsock.h)

La fonction WSACleanup met fin à l’utilisation de la DLL Winsock 2 (Ws2_32.dll).

Syntaxe

int 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 de sockets Windows pour tous les threads.

Code d'erreur Signification
WSANOTINITIALISED
Un appel WSAStartup réussi doit se produire avant d’utiliser cette fonction.
WSAENETDOWN
Le sous-système réseau a échoué.
WSAEINPROGRESS
Un appel bloquant Windows Sockets 1.1 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 qu’elle a terminé l’utilisation des sockets Windows, l’application ou la DLL doit appeler WSACleanup pour se désinscrire d’une implémentation Windows Sockets et permettre à l’implémentation de libérer toutes les ressources allouées pour le compte de l’application ou de la DLL.

Lorsque WSACleanup est appelé, tous les appels de sockets Windows 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 d’événement ni 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 ouverts lors de l’appel de WSACleanup sont réinitialisés et automatiquement libérés comme si des closesocket étaient appelés. 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 à la sortie de l’application. Pour vous 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 affiché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.

RemarqueWSACleanup n’annule pas l’inscription des noms (noms d’homologues, par exemple) qui peuvent avoir été inscrits auprès d’un fournisseur d’espaces de noms Windows Sockets, tel que le fournisseur d’espaces de noms PNRP (Peer Name Resolution Protocol).
 
Dans Windows Sockets 1.1, la tentative d’appel de WSACleanup à partir d’un hook bloquant, puis l’échec de case activée le code de retour a été une erreur de programmation courante. Si une application Winsock 1.1 doit se quitter alors qu’un appel bloquant est en cours, l’application doit d’abord annuler l’appel bloquant avec WSACancelBlockingCall , puis émettre l’appel WSACleanup une fois le contrôle retourné à l’application. Dans Windows Sockets 2, ce problème n’existe pas et la fonction WSACancelBlockingCall a été supprimée.

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 potentiellement provoquer des blocages. Pour plus d’informations, consultez la fonction principale DE DLL.

Windows Phone 8 : cette fonction est prise en charge pour les applications du Store Windows Phone 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 winsock.h (inclure Winsock2.h)
Bibliothèque Ws2_32.lib
DLL Ws2_32.dll

Voir aussi

API du fournisseur d’espaces de noms PNRP

WSAStartup

Fonctions Winsock

Informations de référence sur Winsock

closesocket

shutdown