選取時有多個提供者限制
select 函式是用來判斷集合中一或多個套接字的狀態。 針對每個套接字,呼叫端可以要求讀取、寫入或錯誤狀態的相關信息。 一組套接字是由 fd_set 結構表示。
Windows Sockets 2 可讓應用程式使用一個以上的服務提供者,但 select 函式僅限於與單一服務提供者相關聯的一組套接字。 這絕不會限制應用程式透過多個提供者開啟多個套接字。
有兩種方式可以判斷一組跨越多個服務提供者的套接字狀態:
- 使用封鎖語意時,使用 WSAWaitForMultipleEvents 或 WSAEventSelect 函式。
- 使用非封鎖作業且應用程式已經在使用 Windows 訊息幫浦時,使用 WSAAsyncSelect 函式。
當應用程式需要在跨越多個提供者的一組套接字上使用封鎖語意時,建議使用 WSAWaitForMultipleEvents。 應用程式也可以使用 WSAEventSelect 函式,讓FD_XXX網路事件(請參閱 WSAEventSelect)與事件對象產生關聯,並從事件對象架構內處理(如重疊 I/O 和事件物件中所述)。
WSAAsyncSelect 函式不限於單一提供者,因為它會採用單一套接字描述元做為輸入參數。 不過請注意,WSAEventSelect 函式在 WSAAsyncSelect 上提供更佳的效能和延展性,因為使用 Winsock 事件訊息維護訊息幫浦的額外負荷會隨著使用的套接字總數增加而增加。