SPI 中的共用通訊端
Windows Sockets 中的進程之間的通訊端共用會實作如下。 來源進程會呼叫 WSPDuplicateSocket 來取得特殊 WSAPROTOCOL_INFO 結構。 它會使用一些處理序間通訊 (IPC) 機制,將這個結構的內容傳遞至目標進程。 然後,目標進程會使用呼叫WSPSocket中的WSAPROTOCOL_INFO結構。 此函式傳回的通訊端描述元會是基礎通訊端的額外通訊端描述元,因此會變成共用。
服務提供者必須負責執行來源進程內容中所需的任何作業,並建立 WSAPROTOCOL_INFO 結構,以在目標進程的內容中將其顯示為 WSPSocket 的參數時加以辨識。 WSAPROTOCOL_INFO結構的dwProviderReserved成員可供服務提供者使用,而且可用來儲存任何有用的內容資訊,包括重複的控制碼。
此機制的設計適用于單一線程和先占式多執行緒版本的 Windows。 不過請注意,該通訊端可能會在指定進程中的執行緒之間共用,而不使用 WSPDuplicateSocket 函式,因為通訊端描述元在所有進程的執行緒中都是有效的。
如描述 項配置一節所述,配置新的通訊端描述元時,IFS 提供者必須呼叫 WPUModifyIFSHandle ,而非 IFS 提供者必須呼叫 WPUCreateSocketHandle。
下表說明在交接模式中建立和使用共用通訊端的一個可能案例。
來源程序 | IPC | 目的地處理序 |
---|---|---|
1) WSPSocket、 WSPConnect | ||
2) 要求目標進程識別碼。 | ==> | |
3) 接收進程識別碼要求並回應。 | ||
4) 接收進程識別碼。 | <== | |
5) 呼叫 WSPDuplicateSocket 以取得特殊的 WSAPROTOCOL_INFO 結構。 | ||
6) 將 WSAPROTOCOL_INFO 結構傳送至目標。 | ||
==> | 7) 接收 WSAPROTOCOL_INFO 結構。 | |
8) 呼叫 WSPSocket 以建立共用通訊端描述元。 | ||
9) 使用共用通訊端進行資料交換。 | ||
10) WSPClosesocket | <== |