Partager via


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
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 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.

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 était une erreur de programmation courante. Si une application Winsock 1.1 doit s’arrêter alors qu’un appel bloquant est en attente, 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 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

Voir aussi

API du fournisseur d’espaces de noms PNRP

WSAStartup

Winsock Functions

Référence Winsock

closesocket

shutdown