LPWSPSELECT 回調函式 (ws2spi.h)
LPWSPSelect 函式會決定一或多個套接字的狀態。
語法
LPWSPSELECT Lpwspselect;
int Lpwspselect(
[in] int nfds,
[in, out] fd_set *readfds,
[in, out] fd_set *writefds,
[in, out] fd_set *exceptfds,
[in] const timeval *timeout,
[out] LPINT lpErrno
)
{...}
參數
[in] nfds
僅為了相容性而忽略並包含。
[in, out] readfds
要檢查一組套接字的選擇性指標,以取得可讀性。
[in, out] writefds
要檢查一組套接字的選擇性指標,以取得可寫入性。
[in, out] exceptfds
要檢查錯誤之套接字集的選擇性指標。
[in] timeout
LPWSPSelect 等候的時間上限,或 null 封鎖作業的時間上限,格式為 時間 結構。
[out] lpErrno
錯誤碼的指標。
傳回值
LPWSPSelect 函式會傳回已備妥並包含在 fd_set 結構中的描述元總數,或發生錯誤時SOCKET_ERROR。 如果傳回值是SOCKET_ERROR,lpErrno中提供特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
Windows Sockets 服務提供者無法為其內部作業配置所需的資源,或 readfds、writefds、例外狀況 或 timeval 參數不是使用者地址空間的一部分。 | |
網路子系統失敗。 | |
逾時 值無效,或這三個描述元參數都 NULL。 | |
(封鎖) 呼叫已透過 LPWSPCancelBlockingCall取消。 | |
封鎖 Windows Sockets 呼叫正在進行中,或服務提供者仍在處理回呼函式。 | |
其中一個描述項集包含不是套接字的專案。 |
言論
此函式用來判斷一或多個套接字的狀態。 針對每個套接字,呼叫端可以要求讀取、寫入或錯誤狀態的相關信息。 要求指定狀態的套接字集是由 fd_set 結構表示。 fd_set 中的所有專案都會對應至服務提供者所建立的套接字(也就是說,描述其通訊協定的 WSAPROTOCOL_INFO 結構具有相同 providerId 值)。 傳回時,結構會更新以反映符合指定條件的這些套接字子集,LPWSPSelect 傳回符合條件的套接字總數。 提供一組宏來操作 fd_set。 這些宏與伯克利軟體中使用的宏相容,但基礎表示法完全不同。
參數 readfds 識別要檢查是否有可讀性的套接字。 如果套接字目前正在透過 LPWSPListen接聽,如果已收到連入連線要求,則會將其標示為可讀取,因此保證 LPWSPAccept 完成而不封鎖。 對於其他套接字,可讀性表示佇列數據可供讀取,因此保證不會封鎖 LPWSPRecv 或 LPWSPRecvFrom。
對於連線導向的套接字,可讀性也可以指出已從對等端接收關閉要求。 如果虛擬線路正常關閉,則 LPWSPRecv 會立即傳回零個字節讀取。 如果虛擬線路已重設,則 LPWSPRecv 會立即完成錯誤碼,例如 WSAECONNRESET。 如果已啟用套接字選項SO_OOBINLINE,將會檢查 OOB 數據是否存在(請參閱 LPWSPSetSockOpt)。
參數 writefds 識別要檢查的套接字是否可寫入:
- 如果套接字是透過 LPWSPConnect連線,則可寫入性表示連線建立已順利完成。
- 如果套接字未透過 LPWSPConnect接聽,則可寫入性表示 LPWSPSend 或 LPWSPSendTo 保證成功。
不過,如果 len 超過可用的傳出系統緩衝區空間量,則它們可以在封鎖套接字上封鎖。 它未指定這些保證可以假設有效多久,特別是在多線程環境中。
參數 例外狀況 會識別要檢查是否有 OOB 數據或任何例外錯誤狀況的套接字。 請注意,只有在選項SO_OOBINLINE FALSE時,才會以這種方式報告 OOB 數據。 如果套接字 LPWSPConnect(非封鎖)連線,例外狀況中指出連線嘗試失敗。 此規格不會定義將包含哪些其他錯誤。
、
摘要:當 LPWSPSelect 根據下列情況傳回時,將會在特定集合中識別套接字。
參數 | 描述 |
---|---|
readfds: | 如果呼叫 LPWSPListen,LPWSPAccept 將會成功連線。數據可供讀取(如果啟用SO_OOBINLINE,則包含 OOB 數據)。線上已關閉/重設/終止。 |
writefds: | 如果 LPWSPConnect (非封鎖),連線就會成功。數據可以傳送。 |
例外: | 如果 LPWSPConnect (非封鎖),連線嘗試就會失敗。OOB 數據可供讀取(只有在停用SO_OOBINLINE時)。 |
在頭檔 Ws2spi.h 中定義三個宏和一個 gpall 函式,以操作和檢查描述元集合。 變數FD_SETSIZE決定集合中描述項的數目上限。 (FD_SETSIZE的預設值為 64,可在 #including Ws2spi.h 之前,將 #defining FD_SETSIZE 修改為另一個值。在內部,fd_set 中的套接字句柄不會以 Berkeley UNIX 中的位旗標表示。 其數據表示不透明。 使用這些宏可維護不同套接字環境之間的軟體可移植性。
要操作和檢查 fd_set 內容的宏如下:
-
FD_CLR(s, *set)
-
從 set移除描述元 s。
-
FD_SET(s, *set)
-
將描述元 加入至 集。
-
FD_ZERO(*集)
-
將
集 初始化為 null 集。
用來檢查成員資格的HTTPall 函式為:
-
intWPUFDIsSet (SOCKETs, FD_SET FAR *set] :
-
如果
是 或零 集的成員,則會傳回非零。
參數 逾時 控制 LPWSPSelect 可能需要多久才能完成。 如果
注意
LPWSPSelect 函式不會影響向 LPWSPAsyncSelect 註冊的套接字事件持續性 或 LPWSPEventSelect。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | ws2spi.h |