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 |
---|---|
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen. | |
Fehler beim Netzwerksubsystem. | |
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.
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 |