次の方法で共有


select での複数のプロバイダーの制限

select 関数は、セット内の 1 つ以上のソケットの状態を確認するために使用されます。 呼び出し元は、各ソケットについて、読み取り、書き込み、またはエラーの状態に関する情報を要求できます。 ソケットのセットは、fd_set 構造体によって示されます。

Windows Sockets 2 では、アプリケーションで複数のサービス プロバイダーを使用できますが、select 関数は、1 つのサービス プロバイダーに関連付けられているソケットのセットに制限されます。 これは、アプリケーションが複数のプロバイダーを介して複数のソケットを開くことを制限するものではありません。

複数のサービス プロバイダーにまたがるソケットのセットの状態を確認するには、次の 2 つの方法があります。

  • ブロッキング セマンティクスが使用されている場合は、WSAWaitForMultipleEvents 関数または WSAEventSelect 関数を使用します。
  • 非ブロッキング操作が使用されており、アプリケーションが既に Windows メッセージ ポンプを使用している場合は、WSAAsyncSelect 関数を使用します。

アプリケーションで、複数のプロバイダーにまたがるソケットのセットに対してブロッキング セマンティクスを使用する必要がある場合は、WSAWaitForMultipleEvents をお勧めします。 アプリケーションでは、WSAEventSelect 関数を使用することもできます。これにより、FD_XXX ネットワーク イベント (WSAEventSelect を参照) をイベント オブジェクトに関連付け、イベント オブジェクト パラダイム (「重複した I/O オブジェクトとイベント オブジェクト」で説明しています) 内から処理できるようになります。

WSAAsyncSelect 関数は、単一のソケット記述子を入力パラメーターとして受け取るため、単一のプロバイダーに制限されません。 ただし、使用されるソケットの総数が増加するにつれて、Winsock イベント メッセージによるメッセージ ポンプを維持するオーバーヘッドが増加するため、WSAAsyncSelect よりも WSAEventSelect 関数の方がパフォーマンスとスケーラビリティに優れていることに注意してください。