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 |
---|---|
Un appel WSAStartup réussi doit se produire avant d’utiliser cette fonction. | |
Le sous-système réseau a échoué. | |
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.
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