WSACleanup()

簡述:

中止Windows Sockets DLL的使用.
#include <winsock.h>
int PASCAL FAR WSACleanup ( void );

注釋:

套用程式或DLL在使用Windows Sockets服務之前必須要進行一次成功的WSAStartup()調用.當它完成了Windows Sockets的使用後,應用程式或DLL必須調用WSACleanup()將其從Windows Sockets的實現中註銷,並且該實現釋放為應用程式或DLL分配的任何資源.任何打開的並已建立連線的SOCK_STREAM類型套接口在調用WSACleanup()時會重置; 而已經由closesocket()關閉卻仍有要傳送的懸而未決數據的套接口則不會受影響- 該數據仍要傳送.
對應於一個任務進行的每一次WSAStartup()調用,必須有一個WSACleanup()調用.只有最後的WSACleanup()做實際的清除工作;前面的調用僅僅將Windows Sockets DLL中的內置引用計數遞減.一個簡單的應用程式為確保WSACleanup()調用了足夠的次數,可以在一個循環中不斷調用WSACleanup()直至返回WSANOTINITIALISED.
返回值:
0操作成功.
SOCKET_ERROR 否則.同時可以調用WSAGetLastError()獲得錯誤代碼.
評價:
一個常見的Windows Sockets編程錯誤是:試圖在一個阻塞鉤子函式中調用WSACleanup()並且檢測返回值失敗.如果在一次阻塞調用正在進行時應用程式需要退出,應用程式必須首先通過調用WSACancelBlockingCall()使該阻塞操作作廢, 然後一旦控制返回給應用程式時就啟動WSACleanup().
關於Windows Sockets提供者的說明:
良好的Windows Sockets應用程式會通過調用WSACleanup()指出它從Windows Sockets實現中註銷.本函式因此可以用來釋放分配給指定應用程式的資源.
Windows Sockets的實現必須能處理應用程式在調用WSACleanup()函式之前就中止的情況.-例如,返回一個錯誤.
在一個多執行緒的環境下,WSACleanup()中止了Windows Sockets在所有執行緒上的操作.
Windows Sockets的實現必須確認WSACleanup()調用後,應用程式能調用WSAStartup()函式來重新建立Windows Sockets的套用.
錯誤代碼:
WSANOTINITIALISED 使用本API前必須要進行一次成功的WSAStartup()調用.
WSAENETDOWNWindows Sockets的實現已經檢測到網路子系統故障.
WSAEINPROGRESS 一個阻塞的Windows Sockets操作正在進行.
參見:
WSAStartup()

相關詞條

相關搜尋

熱門詞條

聯絡我們