共用方式為


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中提供特定的錯誤碼。

錯誤碼 意義
WSAEFAULT
Windows Sockets 服務提供者無法為其內部作業配置所需的資源,或 readfdswritefds例外狀況timeval 參數不是使用者地址空間的一部分。
WSAENETDOWN
網路子系統失敗。
WSAEINVAL
逾時 值無效,或這三個描述元參數都 NULL
WSAEINTR
(封鎖) 呼叫已透過 LPWSPCancelBlockingCall取消。
WSAEINPROGRESS
封鎖 Windows Sockets 呼叫正在進行中,或服務提供者仍在處理回呼函式。
WSAENOTSOCK
其中一個描述項集包含不是套接字的專案。

言論

此函式用來判斷一或多個套接字的狀態。 針對每個套接字,呼叫端可以要求讀取、寫入或錯誤狀態的相關信息。 要求指定狀態的套接字集是由 fd_set 結構表示。 fd_set 中的所有專案都會對應至服務提供者所建立的套接字(也就是說,描述其通訊協定的 WSAPROTOCOL_INFO 結構具有相同 providerId 值)。 傳回時,結構會更新以反映符合指定條件的這些套接字子集,LPWSPSelect 傳回符合條件的套接字總數。 提供一組宏來操作 fd_set。 這些宏與伯克利軟體中使用的宏相容,但基礎表示法完全不同。

參數 readfds 識別要檢查是否有可讀性的套接字。 如果套接字目前正在透過 LPWSPListen接聽,如果已收到連入連線要求,則會將其標示為可讀取,因此保證 LPWSPAccept 完成而不封鎖。 對於其他套接字,可讀性表示佇列數據可供讀取,因此保證不會封鎖 LPWSPRecvLPWSPRecvFrom

對於連線導向的套接字,可讀性也可以指出已從對等端接收關閉要求。 如果虛擬線路正常關閉,則 LPWSPRecv 會立即傳回零個字節讀取。 如果虛擬線路已重設,則 LPWSPRecv 會立即完成錯誤碼,例如 WSAECONNRESET。 如果已啟用套接字選項SO_OOBINLINE,將會檢查 OOB 數據是否存在(請參閱 LPWSPSetSockOpt)。

參數 writefds 識別要檢查的套接字是否可寫入:

不過,如果 len 超過可用的傳出系統緩衝區空間量,則它們可以在封鎖套接字上封鎖。 它未指定這些保證可以假設有效多久,特別是在多線程環境中。

參數 例外狀況 會識別要檢查是否有 OOB 數據或任何例外錯誤狀況的套接字。 請注意,只有在選項SO_OOBINLINE FALSE時,才會以這種方式報告 OOB 數據。 如果套接字 LPWSPConnect(非封鎖)連線,例外狀況中指出連線嘗試失敗。 此規格不會定義將包含哪些其他錯誤。

writefdsexceptfds 的任何兩個 readfds null,如果未檢查任何描述項是否要檢查感興趣的條件,則可以指定為 null。 至少有一個必須是非null,而且任何非null 描述元集都必須包含至少一個套接字描述元。

摘要:當 LPWSPSelect 根據下列情況傳回時,將會在特定集合中識別套接字。

參數 描述
readfds 如果呼叫 LPWSPListenLPWSPAccept 將會成功連線。數據可供讀取(如果啟用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 函式為:

intWPUFDIsSetSOCKETsFD_SET FAR *set] :

如果 是 或零 集的成員,則會傳回非零。

參數 逾時 控制 LPWSPSelect 可能需要多久才能完成。 如果 逾時 是 null 指標 LPWSPSelect 將會無限期封鎖,直到至少有一個描述元符合指定的準則為止。 否則,逾時 指向 timeval 結構,指定 LPWSPSelect 在傳回之前應該等候的時間 上限。 LPWSPSelect 傳回時,不會改變 時間 結構的內容。 如果 時間 初始化為 {0, 0},LPWSPSelect 會立即傳回;這是用來輪詢所選套接字的狀態。 如果是這種情況,則會將 LPWSPSelect 呼叫視為非封鎖,並套用非封鎖呼叫的標準假設。 例如,不會呼叫封鎖攔截,而且 Windows Sockets 提供者不會產生。

注意

LPWSPSelect 函式不會影響向 LPWSPAsyncSelect 註冊的套接字事件持續性LPWSPEventSelect

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
標頭 ws2spi.h

另請參閱

LPWSPAccept

LPWSPConnect

LPWSPEventSelect

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo