WSACancelBlockingCall()

WSACancelBlockingCall()數學內一個函式。

簡述:

取消一次正在進行中的阻塞調用
#include <winsock.h>
int PASCAL FAR WSACancelBlockingCall( void );

注釋:

本函式取消了任何本任務中尚未完成的阻塞操作。通常用於以下兩種情況
(1)。在一個阻塞調用進行時,應用程式同時在處理接收到的訊息。在這種情況下,WSAIsBlocking()返回True.
(2)。一個阻塞調用在進行時,Windows Sockets已經回調了應用程式的“阻塞鉤子“函式。(如WSASetBlockingHook()
在每種情況中,原來的阻塞調用將儘快中止,並產生錯誤碼WSAEINTR。(在(1)中,中止發生在Windows訊息調度將控制轉移到Windows Sockets的阻塞例程中時。在(2)中,阻塞調用將在阻塞鉤子函式完成時中止。)
在進行阻塞的connect()操作的情況下,Windows Sockets的實現將儘可能中止阻塞調用,但在連線完成(已經復位)或逾時之前,它不可能釋放套接口資源。同樣值得注意的是在應用程式立即嘗試打開一個新的套接口(若沒有可用的套接口)或試圖連線(connect())同一個套接口時。
取消一個accept()或select()調用不會迫使套接口經過這些調用。只有特殊的調用會失敗H魏臥諶∠昂戲ǖ牟僮髟諶∠笠餐戲ǎ捉涌詰淖刺諶魏吻榭魷露疾換崾苡跋臁*
取消任何除accept()和select()之外的操作可能導致套接口進入非終結的狀態.如果一個應用程式取消了一個套接口上的阻塞操作,應用程式唯一可以在套接口上操作的函式調用就是closesocket(). 儘管其它一些操作可以在一些Windows Sockets實現上運作。如果一個應用程式想獲得最大的可移植性,它必須注意不要在取消操作後依賴於performing operations.應用程式可通過置SO_LINGER上的逾時為0來重置連線。
如果一個取消操作損害了SOCK_STREAM的數據流的完整性,Windows Sockets實現必須重建連線並且用WSAECONNABORTED使所有將來的操作(除了closesocket())失敗。
返回值:
0 操作成功地被取消。
SOCKET_ERROR 其它。(可通過WSAGetLastError()獲得相應錯誤代碼)
評價:
注意網路操作在WSACancelBlockingCall()運行之前完成是可能的。例如,在應用程式處於阻塞鉤子中時數據可以在中斷時接收到用戶緩衝區。在這種情況下,阻塞操作將成功返回如同WSACancelBlockingCall()從未調用過。注意WSACancelBlockingCall()仍是成功的。確認一個操作是否真正地被取消的唯一辦法是檢查從阻塞調用的WSAEINTR的返回值。
錯誤代碼:
WSANOTINITIALISED 在使用本API前必須進行一次成功的WSAStartup()調用.
WSAENETDOWN WINDOWS SOCKETS實現已檢測到網路子系統故障.
WSAEINVAL 指出指定的參數之一是非法的.

相關詞條

相關搜尋

熱門詞條

聯絡我們