次の方法で共有


SPI の共有ソケット

Windows ソケットのプロセス間のソケット共有は、次のように実装されます。 ソース プロセス WSPDuplicateSocket を呼び出して、特別な WSAPROTOCOL_INFO 構造を取得します。 一部のプロセス間通信 (IPC) メカニズムを使用して、この構造体の内容をターゲット プロセスに渡します。 その後、ターゲット プロセスは、WSPSocketする呼び出しで WSAPROTOCOL_INFO 構造体を使用します。 この関数によって返されるソケット記述子は、基になるソケットへの追加のソケット記述子になり、共有されます。

ソース プロセス コンテキストで必要な操作を実行し、ターゲット プロセスのコンテキストで WSPSocketするためのパラメーターとして認識される WSAPROTOCOL_INFO 構造を作成するのは、サービス プロバイダーの責任です。 WSAPROTOCOL_INFO 構造体の dwProviderReserved メンバーは、サービス プロバイダーの使用に使用でき、重複したハンドルなど、有用なコンテキスト情報を格納するために使用できます。

このメカニズムは、シングル スレッドバージョンとプリエンプティブ マルチスレッド バージョンの両方の Windows に適するように設計されています。 ただし、ソケット記述子はプロセスのすべてのスレッドで有効であるため、WSPDuplicateSocket 関数を使用せずに、特定のプロセス内のスレッド間でソケットを共有できます。

記述子の割り当て セクションで説明されているように、新しいソケット記述子が割り当てられている場合、IFS プロバイダーは WPUModifyIFSHandle呼び出す必要があり、IFS 以外のプロバイダーは WPUCreateSocketHandle呼び出す必要があります。

ハンドオフ モードで共有ソケットを確立して使用するシナリオの 1 つを次の表に示します。

ソース プロセス IPC 宛先プロセス
1) WSPSocketWSPConnectする
2) ターゲット プロセス識別子を要求します。 ==>
3) プロセス識別子要求を受信し、応答します。
4) プロセス識別子を受信します。 <==
5) WSPDuplicateSocket呼び出して、特別な WSAPROTOCOL_INFO 構造を取得します。
6) ターゲットに WSAPROTOCOL_INFO 構造を送信します。
==> 7) WSAPROTOCOL_INFO 構造を受け取ります。
8) WSPSocket呼び出して、共有ソケット記述子を作成します。
9)データ交換に共有ソケットを使用します。
10) WSPClosesocket <==