共用方式為


SPI 中的共用套接字

Windows Sockets 中的進程之間的套接字共用實作如下。 來源進程會呼叫 WSPDuplicateSocket,以取得特殊的 WSAPROTOCOL_INFO 結構。 它會使用一些進程間通訊 (IPC) 機制,將此結構的內容傳遞至目標進程。 然後,目標行程會使用 呼叫中的 WSAPROTOCOL_INFO 結構,WSPSocket。 此函式傳回的套接字描述元將會是基礎套接字的額外套接字描述元,因此會變成共用。

服務提供者有責任在來源進程內容中執行所需的任何作業,並建立 WSAPROTOCOL_INFO 結構,在後續顯示為參數,以 目標進程內容中的 WSPSocket 時加以辨識。 dwProviderReservedWSAPROTOCOL_INFO 結構的成員可供服務提供者使用,而且可用來儲存任何有用的內容資訊,包括重複的句柄。

此機制的設計適用於單個線程和先佔式多線程版本的 Windows。 不過請注意,在指定進程中的線程之間可以共用套接字,而不需使用 WSPDuplicateSocket 函式,因為套接字描述元在所有進程的線程中都是有效的。

如描述元配置 一節所述,當配置新的套接字描述元時,IFS 提供者必須呼叫 WPUModifyIFSHandle,且非 IFS 提供者必須呼叫 WPUCreateSocketHandle

下表說明在交接模式中建立和使用共用套接字的可能案例。

來源程式 IPC 目的地進程
1) WSPSocketWSPConnect
2) 要求目標進程識別碼。 ==>
3) 接收進程標識碼要求並回應。
4) 接收進程標識碼。 <==
5) 呼叫 WSPDuplicateSocket 以取得特殊的 WSAPROTOCOL_INFO 結構。
6) 將 WSAPROTOCOL_INFO 結構傳送至目標。
==> 7) 接收 WSAPROTOCOL_INFO 結構。
8) 呼叫 WSPSocket,以建立共用套接字描述元。
9)使用共用套接字進行數據交換。
10) WSPClosesocket <==