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 | <== |