Freigeben über


WSACleanup-Funktion (winsock2.h)

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

Syntax

int WSAAPI WSACleanup();

Rückgabewert

Der Rückgabewert ist null, 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
Fehler beim Netzwerksubsystem.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet noch eine Rückruffunktion.

Hinweise

Eine Anwendung oder DLL ist erforderlich, um einen erfolgreichen WSAStartup-Aufruf auszuführen, bevor windows Sockets-Dienste verwendet werden können. Wenn die Verwendung von Windows Sockets abgeschlossen ist, muss die Anwendung oder DLL WSACleanup aufrufen, um die Registrierung bei 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 Benachrichtigungen oder ohne Signalisierung von Ereignisobjekten. 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 zu aufrufen, sofern angegeben. In diesem Fall schlagen die ausstehenden überlappenden Vorgänge mit dem Fehler status WSA_OPERATION_ABORTED fehl.

Sockets, die beim Aufruf von WSACleanup geöffnet waren, werden zurückgesetzt und automatisch aufgehoben, als ob closesocket aufgerufen würde. Sockets, die mit closesocket geschlossen wurden, aber noch daten ausstehen, 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 das Schließen abgeschlossen ist, bevor sie closesocket und WSACleanup aufruft. Alle Ressourcen und der interne Status, z. B. nicht gepostete oder gesendete Nachrichten in der Warteschlange, müssen aufgehoben werden, damit sie für den nächsten Benutzer verfügbar sind.

Für jeden erfolgreichen Aufruf von WSAStartup muss ein Aufruf von WSACleanup erfolgen. Nur der abschließende WSACleanup-Funktionsaufruf führt die eigentliche Bereinigung aus. 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 aus einem blockierenden Hook 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 ausgeben, sobald die Steuerung an die Anwendung zurückgegeben wurde. In Windows Sockets 2 ist dieses Problem nicht vorhanden, und die Funktion WSACancelBlockingCall 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 ab Windows Phone 8 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 winsock2.h (Winsock2.h einschließen)
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

PNRP-Namespaceanbieter-API

WSAStartup

Winsock-Funktionen

Winsock-Referenz

closesocket

shutdown