Socket.Select(IList, IList, IList, Int32) Socket.Select(IList, IList, IList, Int32) Socket.Select(IList, IList, IList, Int32) Socket.Select(IList, IList, IList, Int32) Method

定義

1 つまたは複数のソケットのステータスを判断します。Determines the status of one or more sockets.

public:
 static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, int microSeconds);
public static void Select (System.Collections.IList checkRead, System.Collections.IList checkWrite, System.Collections.IList checkError, int microSeconds);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * int -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, microSeconds As Integer)

パラメーター

checkRead
IList IList IList IList

読みやすさを確認する Socket インスタンスの IListAn IList of Socket instances to check for readability.

checkWrite
IList IList IList IList

書き込み機能をチェックする Socket インスタンスの IListAn IList of Socket instances to check for writability.

checkError
IList IList IList IList

エラーをチェックする Socket インスタンスの IListAn IList of Socket instances to check for errors.

microSeconds
Int32 Int32 Int32 Int32

タイムアウト値 (マイクロ秒)。The time-out value, in microseconds. 値が -1 の場合は、タイムアウトが無限であることを示します。A -1 value indicates an infinite time-out.

例外

checkRead パラメーターは null または空です。The checkRead parameter is null or empty.

および-and- checkWrite パラメーターは null または空です。The checkWrite parameter is null or empty および-and- checkError パラメーターは null または空です。The checkError parameter is null or empty.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

次のコード例ではSelect接続要求をリッスンするソケットを決定します。The following code example uses Select to determine which listening sockets have a connection request.

      IPHostEntry^ lipa = Dns::Resolve( Dns::GetHostName() );
      
      //Gets three separate local endpoints.
      IPEndPoint^ lep1 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11000 );
      IPEndPoint^ lep2 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11001 );
      IPEndPoint^ lep3 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11002 );
      
      //creates an array of endpoints.
      array<IPEndPoint^>^ipendpoints = gcnew array<IPEndPoint^>(3);
      ipendpoints[ 0 ] = lep1;
      ipendpoints[ 1 ] = lep2;
      ipendpoints[ 2 ] = lep3;
      
      //Creates three separate sockets.
      Socket^ s1 = gcnew Socket( lep1->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
      Socket^ s2 = gcnew Socket( lep2->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
      Socket^ s3 = gcnew Socket( lep3->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
      array<Socket^>^socketList = gcnew array<Socket^>(3);
      socketList[ 0 ] = s1;
      socketList[ 1 ] = s2;
      socketList[ 2 ] = s3;
      
      //Binds and Listens on all sockets in the array of sockets.
      for ( int i = 0; i < 3; i++ )
      {
         socketList[ i ]->Bind( ipendpoints[ i ] );
         socketList[ i ]->Listen( 1000 );

      }
      
      //Calls Select to determine which sockets are ready for reading.
      Socket::Select( safe_cast<IList^>(socketList), nullptr, nullptr, 1000 );
      
      //Reads on the sockets returned by Select.
      array<Byte>^buffer = gcnew array<Byte>(1024);
      String^ outString;
      for ( Int32 j = 0; j < (socketList->Length - 1); j++ )
      {
         socketList[ j ]->Receive( buffer );
         outString =  "Socket ";
         outString->Concat( j.ToString(),  " has the message", Encoding::ASCII->GetString( buffer ) );
         Console::WriteLine( outString );

      }
   }

};

int main()
{
   return 0;
}

IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostEntry.AddressList[0];

Socket socket0 = null;
Socket socket1 = null; 
Socket socket2 = null; 
Socket socket3 = null; 
Socket socket4 = null; 
Socket socket5 = null; 

ArrayList listenList = new ArrayList();
listenList.Add(socket0);
listenList.Add(socket1);
listenList.Add(socket2);

ArrayList acceptList = new ArrayList();
acceptList.Add(socket3);
acceptList.Add(socket4);
acceptList.Add(socket5);

for( int i = 0; i < 3; i++ )
{
  listenList[i] = new Socket(AddressFamily.InterNetwork,
                             SocketType.Stream,
                             ProtocolType.Tcp);
  ((Socket)listenList[i]).Bind(new IPEndPoint(ipAddress, 11000 + i));
  ((Socket)listenList[i]).Listen(10);
}

// Only the sockets that contain a connection request
// will remain in listenList after Select returns.

Socket.Select(listenList, null, null, 1000);

for( int i = 0; i < listenList.Count; i++ )
{
  acceptList[i] = ((Socket)listenList[i]).Accept();
}
Dim ipHostEntry As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim ipAddress As IPAddress = ipHostEntry.AddressList(0)

Dim socket0 As Socket = Nothing
Dim socket1 As Socket = Nothing
Dim socket2 As Socket = Nothing
Dim socket3 As Socket = Nothing
Dim socket4 As Socket = Nothing
Dim socket5 As Socket = Nothing

Dim listenList As New ArrayList()
listenList.Add(socket0)
listenList.Add(socket1)
listenList.Add(socket2)

Dim acceptList As New ArrayList()
acceptList.Add(socket3)
acceptList.Add(socket4)
acceptList.Add(socket5)

Dim i As Integer
For i = 0 To 2
   listenList(i) = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
   CType(listenList(i), Socket).Bind(New IPEndPoint(ipAddress, 11000 + i))
   CType(listenList(i), Socket).Listen(10)
Next i

'Only the sockets that contain a connection request
'will remain in listenList after Select returns.
Socket.Select(listenList, Nothing, Nothing, 1000)

For i = 0 To listenList.Count - 1
   acceptList(i) = CType(listenList(i), Socket).Accept()
Next i

注釈

Select 1 つまたは複数の状態を決定する静的メソッドは、Socketインスタンス。Select is a static method that determines the status of one or more Socket instances. 1 つまたは複数のソケットを配置する必要があります、IList使用する前に、Selectメソッド。You must place one or more sockets into an IList before you can use the Select method. 呼び出すことで、読みやすさの確認Selectで、IListとして、checkReadパラメーター。Check for readability by calling Select with the IList as the checkRead parameter. 書き込み機能、ソケットを確認するには、使用、checkWriteパラメーター。To check your sockets for writability, use the checkWrite parameter. エラー条件を検出するため使用checkErrorします。For detecting error conditions, use checkError. 呼び出した後SelectIList条件を満たすソケットのみが格納されます。After calling Select, the IList will be filled with only those sockets that satisfy the conditions.

リッスン状態にする場合は、読みやすくすることを意味する呼び出しAcceptはブロックすることがなく成功します。If you are in a listening state, readability means that a call to Accept will succeed without blocking. 接続は既に承諾済み場合、読みやすさは、データが読み取り可能なことを意味します。If you have already accepted the connection, readability means that data is available for reading. このような場合は、すべての受信操作はブロックすることがなく成功します。In these cases, all receive operations will succeed without blocking. 読みやすさを示すこともかどうか、リモートSocketがシャット ダウン、接続はそのケースでの呼び出しをReceiveは返されたバイト数を 0 で、すぐに戻ります。Readability can also indicate whether the remote Socket has shut down the connection; in that case a call to Receive will return immediately, with zero bytes returned.

Select 時に返す対象のソケットの少なくとも 1 つ (でソケット、 checkReadcheckWritecheckErrorを一覧表示) が、指定の条件を満たしている、またはmicroSecondsパラメーターを超過すると、どちらか早い。Select returns when at least one of the sockets of interest (the sockets in the checkRead, checkWrite, and checkError lists) meets its specified criteria, or the microSeconds parameter is exceeded, whichever comes first. 設定microSecondsを-1 に無限のタイムアウトを指定します。Setting microSeconds to -1 specifies an infinite time-out.

非ブロッキング呼び出しを行った場合Connect、書き込み機能が正常に接続していることを意味します。If you make a nonblocking call to Connect, writability means that you have connected successfully. 接続が確立されて既にある場合、書き込み機能は、すべての送信操作がブロックすることがなく成功を意味します。If you already have a connection established, writability means that all send operations will succeed without blocking.

非ブロッキング呼び出しを行ったかどうかConnectcheckerrorパラメーターが正常に接続されていないソケットを識別します。If you have made a non-blocking call to Connect, the checkerror parameter identifies sockets that have not connected successfully.

注意

使用して、Pollメソッドの場合は、1 つの状態を確認するSocketします。Use the Poll method if you only want to determine the status of a single Socket.

注意

このメソッドは、切断されたネットワーク ケーブルなどの接続に関する問題の特定の種類を検出できないこと、またはリモート ホストが異常停止されました。This method cannot detect certain kinds of connection problems, such as a broken network cable, or that the remote host was shut down ungracefully. この種のエラーを検出するためにデータ送信または受信しようとする必要があります。You must attempt to send or receive data to detect these kinds of errors.

注意

表示された場合、SocketExceptionを使用して、SocketException.ErrorCode特定のエラー コードを取得するプロパティ。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得した後を参照してください、 Windows Sockets version 2 API エラー コードエラーの詳細な説明のドキュメント。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

適用対象

こちらもご覧ください