複製鏈接
請複製以下鏈接發送給好友

WSACancelBlockingCall()

鎖定
取消一次正在進行中的阻塞調用。
外文名
WSACancelBlockingCall()
作    用
取消一次正在進行中的阻塞調用
類    型
C語言
領    域
計算機

目錄

WSACancelBlockingCall()簡述

#include
int PASCAL FAR WSACancelBlockingCall(void);

WSACancelBlockingCall()註釋

WSACancelBlockingCall()阻塞操作

本函數取消了任何本任務中尚未完成的阻塞操作。通常用於以下兩種情況:
⑴。在一個阻塞調用進行時,應用程序同時在處理接收到的消息。在這種情況下,WSAIsBlocking( )返回True.
⑵。一個阻塞調用在進行時,Windows Sockets已經回調了應用程序的“阻塞鈎子“函數。(如WSASetBlockingHook( ))
在每種情況中,原來的阻塞調用將盡快中止,併產生錯誤碼WSAEINTR。(在⑴中,中止發生在Windows消息調度將控制轉移到Windows Sockets的阻塞例程中時。在⑵中,阻塞調用將在阻塞鈎子函數完成時中止。)
在進行阻塞的connect( )操作的情況下,Windows Sockets的實現將盡可能中止阻塞調用,但在連接完成(已經復位)或超時之前,它不可能釋放套接口資源。同樣值得注意的是在應用程序立即嘗試打開一個新的套接口(若沒有可用的套接口)或試圖連接(connect())同一個套接口時。
取消一個accept( )或select( )調用不會迫使套接口經過這些調用。只有特殊的調用會失敗.
取消任何除accept( )和select( )之外的操作可能導致套接口進入非終結的狀態.如果一個應用程序取消了一個套接口上的阻塞操作,應用程序唯一可以在套接口上操作的函數調用就是CloseSocket( ). 儘管其它一些操作可以在一些Windows Sockets實現上運作。如果一個應用程序想獲得最大的可移植性,它必須注意不要在取消操作後依賴於performing operations.應用程序可通過置SO_LINGER上的超時為0來重置連接。
如果一個取消操作損害了SOCK_STREAM的數據流的完整性,Windows Sockets實現必須重建連接並且用WSAECONNABORTED使所有將來的操作(除了closesocket( ))失敗。
返回值:
0 操作成功地被取消。
SOCKET_ERROR 其它。(可通過WSAGetLastError( )獲得相應錯誤代碼
評價:

WSACancelBlockingCall()其他信息

注意網絡操作在WSACancelBlockingCall( )運行之前完成是可能的。例如,在應用程序處於阻塞鈎子中時數據可以在中斷時接收到用户緩衝區。在這種情況下,阻塞操作將成功返回如同WSACancelBlockingCall( )從未調用過。注意WSACancelBlockingCall( )仍是成功的。確認一個操作是否真正地被取消的唯一辦法是檢查從阻塞調用的WSAEINTR的返回值。
錯誤代碼:
WSANOTINITIALISED 在使用本API前必須進行一次成功的WSAStartup( )調用.
WSAENETDOWN WINDOWS SOCKETS實現已檢測到網絡子系統故障.
WSAEINVAL 指出指定的參數之一是非法的.