共用方式為


共用通訊端

引進 WSADuplicateSocket 函式,以跨進程啟用通訊端共用。 來源進程會呼叫 WSADuplicateSocket ,以取得目標進程識別碼的特殊 WSAPROTOCOL_INFO 結構。 它會使用一些處理序間通訊 (IPC) 機制,將這個結構的內容傳遞至目標進程。 然後,目標進程會使用呼叫WSPSocket中的WSAPROTOCOL_INFO結構。 此函式傳回的通訊端描述元會是基礎通訊端的額外通訊端描述元,因此會變成共用。 通訊端可以在給定進程中的執行緒之間共用,而不使用 WSADuplicateSocket 函式,因為通訊端描述元在進程的所有線程中都是有效的。

參考共用通訊端的兩個 (或更多) 描述項,可以獨立使用,就 I/O 而言。 不過,Winsock 介面不會實作任何類型的存取控制,因此進程必須協調共用通訊端上的任何作業。 共用通訊端的一般範例是使用一個程式來建立通訊端和建立連線。 接著,此程式會將通訊端交給負責資訊交換的其他進程。

WSADuplicateSocket函式會建立通訊端描述元,而不是基礎通訊端。 如此一來,所有與通訊端相關聯的狀態都會在所有描述項上保持一般。 例如,使用一個描述元執行的 setockopt 作業接著會使用任何或所有描述元的 取得ockopt 來顯示。 進程可以在重複的通訊端上呼叫 closesocket ,而且描述項將會解除配置。 不過,基礎通訊端會保持開啟狀態,直到使用最後一個剩餘的描述元呼叫 closesocket 為止。

共用通訊端上的通知受限於 WSAAsyncSelectWSAEventSelect 函式的一般條件約束。 使用任何共用描述項發出其中一個呼叫,會取消通訊端的任何先前事件註冊,不論使用哪一個描述元進行該註冊。 因此,例如,無法讓進程 A 接收FD_READ事件和處理 B 接收FD_WRITE事件。 對於需要這類緊密協調的情況,建議開發人員使用執行緒,而不是個別的進程。