Freigeben über


WSACleanup-Funktion (winsock.h)

Die WSACleanup-Funktion beendet die Verwendung der Winsock 2-DLL (Ws2_32.dll).

Syntax

int WSACleanup();

Rückgabewert

Der Rückgabewert ist 0, wenn der Vorgang erfolgreich war. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und eine bestimmte Fehlernummer kann durch Aufrufen von WSAGetLastError abgerufen werden.

In einer Multithreadumgebung beendet WSACleanup Windows Sockets-Vorgänge für alle Threads.

Fehlercode Bedeutung
WSANOTINITIALISIERT
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen.
WSAENETDOWN
Beim Netzwerksubsystem ist ein Fehler aufgetreten.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion.

Hinweise

Eine Anwendung oder DLL ist erforderlich, um einen erfolgreichen WSAStartup-Aufruf auszuführen, bevor sie Windows Sockets-Dienste verwenden kann. Wenn die Verwendung von Windows Sockets abgeschlossen ist, muss die Anwendung oder DLL WSACleanup aufrufen, um die Registrierung von einer Windows Sockets-Implementierung aufzuheben und der Implementierung das Freigeben aller Ressourcen zu ermöglichen, die im Auftrag der Anwendung oder DLL zugeordnet sind.

Wenn WSACleanup aufgerufen wird, werden alle ausstehenden blockierenden oder asynchronen Windows Sockets-Aufrufe, die von einem beliebigen Thread in diesem Prozess ausgegeben werden, abgebrochen, ohne Benachrichtigungsmeldungen zu veröffentlichen oder Ereignisobjekte zu signalisieren. Alle ausstehenden überlappenden Sende- oder Empfangsvorgänge (z. B. WSASend, WSASendTo, WSARecv, oder WSARecvFrom mit einem überlappenden Socket), die von einem beliebigen Thread in diesem Prozess ausgegeben werden, werden ebenfalls abgebrochen, ohne das Ereignisobjekt festzulegen oder die Vervollständigungsroutine auf aufruft, sofern angegeben. In diesem Fall schlagen die ausstehenden überlappenden Vorgänge fehl, da der Fehler status WSA_OPERATION_ABORTED.

Sockets, die beim Aufruf von WSACleanup geöffnet waren, werden zurückgesetzt und automatisch so aufgehoben, als ob closesocket aufgerufen wurde. Sockets, die mit closesocket geschlossen wurden, aber noch ausstehende Daten aufweisen, die gesendet werden sollen, können beim Aufruf von WSACleanup betroffen sein. In diesem Fall können die ausstehenden Daten verloren gehen, wenn die WS2_32.DLL beim Beenden der Anwendung aus dem Arbeitsspeicher entladen wird. Um sicherzustellen, dass alle ausstehenden Daten gesendet werden, sollte eine Anwendung das Herunterfahren verwenden, um die Verbindung zu schließen. Warten Sie dann, bis der Abschluss abgeschlossen ist, bevor Sie closesocket und WSACleanup aufrufen. Alle Ressourcen und der interne Zustand, z. B. nicht gepostete oder gebuchte Nachrichten in der Warteschlange, müssen zugeordnet werden, um für den nächsten Benutzer verfügbar zu sein.

Für jeden erfolgreichen Aufruf von WSAStartup muss ein Aufruf von WSACleanup vorhanden sein. Nur der letzte Aufruf der WSACleanup-Funktion führt die eigentliche Bereinigung durch. Die vorherigen Aufrufe dekrementieren einfach eine interne Verweisanzahl im WS2_32.DLL.

HinweisWSACleanup hebt die Registrierung von Namen (z. B. Peernamen) nicht auf, die möglicherweise bei einem Windows Sockets-Namespaceanbieter wie dem PNRP-Namespaceanbieter (Peer Name Resolution Protocol) registriert wurden.
 
In Windows Sockets 1.1 war der Versuch, WSACleanup innerhalb eines blockierenden Hooks aufzurufen und dann den Rückgabecode nicht zu überprüfen, ein häufiger Programmierfehler. Wenn eine Winsock 1.1-Anwendung beendet werden muss, während ein blockierender Aufruf aussteht, muss die Anwendung zuerst den blockierenden Aufruf mit WSACancelBlockingCall abbrechen und dann den WSACleanup-Aufruf ausstellen, sobald das Steuerelement an die Anwendung zurückgegeben wurde. In Windows Sockets 2 ist dieses Problem nicht vorhanden, und die WSACancelBlockingCall-Funktion wurde entfernt.

Die WSACleanup-Funktion führt in der Regel dazu, dass protokollspezifische Hilfs-DLLs entladen werden. Daher sollte die WSACleanup-Funktion nicht über die DllMain-Funktion in einer Anwendungs-DLL aufgerufen werden. Dies kann zu Deadlocks führen. Weitere Informationen finden Sie in der DLL-Hauptfunktion.

Windows Phone 8: Diese Funktion wird für Windows Phone Store-Apps auf Windows Phone 8 und höher unterstützt.

Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8.1, Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile winsock.h (einschließlich Winsock2.h)
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

PNRP-Namespaceanbieter-API

WSAStartup

Winsock-Funktionen

Winsock-Referenz

closesocket

shutdown