WSADuplicateSocket 関数
構文
int WSAAPI WSADuplicateSocketW(
[in] SOCKET s,
[in] DWORD dwProcessId,
[out] LPWSAPROTOCOL_INFOW lpProtocolInfo
);
パラメーター
[in] s
ローカル ソケットを識別する記述子。
[in] dwProcessId
重複したソケットが使用されるターゲット プロセスのプロセス識別子。
[out] lpProtocolInfo
WSAPROTOCOL_INFO 構造体を格納するのに十分な大きさの、クライアントによって割り当てられたバッファーへのポインター。 サービス プロバイダーは、プロトコル情報構造の内容をこのバッファーにコピーします。
戻り値
エラーが発生しない場合、WSADuplicateSocket
| エラー コード | 意味 |
|---|---|
|
WSAStartup 呼び出し |
|
ネットワーク サブシステムが失敗しました。 |
|
指定されたパラメーターのいずれかが無効であることを示します。 |
|
ブロックしている Windows ソケット 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 |
|
これ以上ソケット記述子を使用できません。 |
|
使用できるバッファー領域はありません。 ソケットを作成できません。 |
|
記述子はソケットではありません。 |
|
lpProtocolInfo パラメーターは、ユーザー・アドレス・スペースの有効な部分ではありません。 |
備考
WSADuplicateSocket 関数
ソケット記述子はプロセスのすべてのスレッドで有効であるため、WSADuplicateSocket 関数を使用せずに、特定のプロセス内のスレッド間でソケットを共有できます。
次の表に、共有ソケットを確立して引き渡すシナリオの 1 つを示します。
| ソース プロセス | IPC | 宛先プロセス |
|---|---|---|
| 1) WSASocket、WSAConnect |
||
| 2) 要求ターゲット プロセス識別子 | ==> | |
| 3) プロセス識別子要求を受信して応答する | ||
| 4) 受信プロセス識別子 | <== | |
| 5) WSADuplicateSocket |
||
| 6) WSAPROTOCOL_INFO の構造をターゲットに送信する | ||
| ==> | 7) 受信 WSAPROTOCOL_INFO 構造 | |
| 8) WSASocket |
||
| 9) データ交換に共有ソケットを使用する | ||
| 10) closesocket を |
<== |
共有ソケットを参照する記述子は、I/O 用に個別に使用できます。 ただし、Windows ソケット インターフェイスはアクセス制御の種類を実装していないため、共有ソケットで操作を調整するプロセスに依存します。 通常、共有ソケットは、ソケットの作成と接続の確立を担当する 1 つのプロセスと、情報交換を担当する他のプロセスを持つ場合に使用されます。
ソケットに関連付けられているすべての状態情報は、ソケット記述子が実際のソケットではなく重複しているため、すべての記述子で共通に保持されます。 たとえば、1 つの記述子を使用して実行された setsockopt 操作は、その後、任意またはすべての記述子から getsockopt を使用して表示されます。 ソース プロセスと宛先プロセスの両方で、それぞれ WSASocket 関数呼び出しに同じフラグを渡す必要があります。 ソース プロセスが
共有ソケットでの通知は、WSAAsyncSelect と WSAEventSelect
手記
winsock2.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WSADuplicateSocket を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
| 要件 | 価値 |
|---|---|
| サポートされる最小クライアント | Windows 8.1、Windows Vista [デスクトップ アプリ |UWP アプリ] |
| サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリ |UWP アプリ] |
| ターゲット プラットフォーム の |
ウィンドウズ |
| ヘッダー | winsock2.h |
| ライブラリ | Ws2_32.lib |
| DLL | Ws2_32.dll |
関連項目
WSASocket の