WSACleanup 函式 (winsock.h)
WSACleanup 函式會終止使用 Winsock 2 DLL (Ws2_32.dll) 。
Syntax
int WSACleanup();
傳回值
如果作業成功,則傳回值為零。 否則,會傳回SOCKET_ERROR值,而且可以呼叫 WSAGetLastError 來擷取特定的錯誤號碼。
在多線程環境中, WSACleanup 會終止所有線程的 Windows Sockets 作業。
錯誤碼 | 意義 |
---|---|
使用此函式之前,必須先進行成功的 WSAStartup 呼叫。 | |
網路子系統失敗。 | |
封鎖的 Windows Sockets 1.1 呼叫正在進行中,或者服務提供者仍在處理回呼函式。 |
備註
必須先執行成功的 WSAStartup 呼叫,才能使用 Windows Sockets 服務的應用程式或 DLL。 當它完成 Windows Sockets 的使用時,應用程式或 DLL 必須呼叫 WSACleanup 以從 Windows Sockets 實作取消註冊本身,並允許實作釋放代表應用程式或 DLL 配置的任何資源。
呼叫 WSACleanup 時,此進程中任何線程所發出的任何擱置封鎖或異步 Windows Sockets 呼叫都會取消,而不會張貼任何通知訊息,也不會發出任何事件物件的訊號。 任何擱置重疊的傳送或接收作業, (WSASend、 WSASendTo、 WSARecv 或 WSARecvFrom 搭配重疊套接字,例如,如果指定了,任何線程所發出的) 也會取消,而不需設定事件物件或叫用完成例程。 在此情況下,擱置的重迭作業失敗,錯誤狀態 WSA_OPERATION_ABORTED。
呼叫 WSACleanup 時開啟的套接字會重設,並自動解除分配,就像呼叫 closesocket 一樣。 已使用 closesocket 關閉但仍然要傳送暫止數據的套接字,在呼叫 WSACleanup 時可能會受到影響。 在此情況下,如果應用程式結束時,從記憶體卸除 WS2_32.DLL,暫止的數據可能會遺失。 為了確保傳送所有擱置的數據,應用程式應該使用 關機 來關閉連線,然後等到關閉完成,再呼叫 closesocket 和 WSACleanup。 所有資源和內部狀態,例如已排入佇列的未張貼或張貼的訊息,都必須解除分配,才能供下一位使用者使用。
每個成功呼叫 WSAStartup 時,都必須呼叫 WSACleanup。 只有最終 的 WSACleanup 函式呼叫會執行實際的清除。 上述呼叫只會遞減 WS2_32.DLL 中的內部參考計數。
WSACleanup 函式通常會導致卸除通訊協定特定的協助程式 DLL。 因此,不應該從應用程式 DLL 中的 DllMain 函式呼叫 WSACleanup 函式。 這可能會造成死結。 如需詳細資訊,請參閱 DLL Main 函式。
Windows Phone 8:Windows Phone 8 和更新版本 Windows Phone 上的 Windows Phone Store 應用程式支援此函式。
Windows 8.1 和 Windows Server 2012 R2:Windows 市集應用程式支援此函式,Windows 8.1、Windows Server 2012 R2 及更新版本。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8.1、Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | winsock.h (包含 Winsock2.h) |
程式庫 | Ws2_32.lib |
Dll | Ws2_32.dll |