Socket.Select メソッド

定義

オーバーロード

Select(IList, IList, IList, TimeSpan)

1 つまたは複数のソケットのステータスを判断します。

Select(IList, IList, IList, Int32)

1 つまたは複数のソケットのステータスを判断します。

Select(IList, IList, IList, TimeSpan)

ソース:
Socket.cs
ソース:
Socket.cs
ソース:
Socket.cs

1 つまたは複数のソケットのステータスを判断します。

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

パラメーター

checkRead
IList

読みやすさを確認する Socket インスタンスの IList

checkWrite
IList

書き込み機能をチェックする Socket インスタンスの IList

checkError
IList

エラーをチェックする Socket インスタンスの IList

timeout
TimeSpan

タイムアウト値。 -1 マイクロ秒に等しい値は、無限タイムアウトを示します。

例外

checkReadcheckWriteまたは checkError パラメーターが または 空です null

checkReadcheckWrite、または checkError パラメーターに含まれるソケットが多すぎます。

timeout -1 マイクロ秒未満であるか、マイクロ秒より MaxValue 大きかった

ソケットへのアクセスを試行しているときにエラーが発生しました。

1 つ以上のソケットが破棄されました。

適用対象

Select(IList, IList, IList, Int32)

ソース:
Socket.cs
ソース:
Socket.cs
ソース:
Socket.cs

1 つまたは複数のソケットのステータスを判断します。

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);
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

読みやすさを確認する Socket インスタンスの IList

checkWrite
IList

書き込み機能をチェックする Socket インスタンスの IList

checkError
IList

エラーをチェックする Socket インスタンスの IList

microSeconds
Int32

タイムアウト値 (マイクロ秒)。 値が -1 の場合は、タイムアウトが無限であることを示します。

例外

checkRead パラメーターは null または空です。

および

checkWrite パラメーターは null または空です。

および

checkError パラメーターは null または空です。

ソケットへのアクセスを試行しているときにエラーが発生しました。

.NET 5 以降: 1 つ以上のソケットが破棄されます。

checkReadcheckWrite、または checkError パラメーターに含まれるソケットが多すぎます。

次のコード例では、 を使用 Select して、接続要求を持つリッスン ソケットを特定します。

      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 のインスタンスの状態を決定する静的メソッドです。 メソッドを使用する前に、1 つ以上のソケットを に IList 配置する Select 必要があります。 パラメーターとして を使用して をIList呼び出Selectして、読みやすさをcheckRead確認します。 書き込み可能なソケットをチェックするには、 パラメーターをcheckWrite使用します。 エラー状態を検出する場合は、 を使用します checkError。 を呼び出 Selectすと、 IList には条件を満たすソケットのみが入力されます。

リッスン状態の場合、読みやすさは、 の呼び出しがブロックされずに Accept 成功することを意味します。 接続を既に受け入れている場合、読みやすさはデータが読み取り可能であることを意味します。 このような場合、すべての受信操作はブロックされずに成功します。 読みやすさは、リモート Socket が接続をシャットダウンしたかどうかを示すこともできます。その場合、 への Receive 呼び出しはすぐに返され、0 バイトが返されます。

Selectは、対象のソケット (、checkWrite、および checkError リスト内のソケットcheckRead) の少なくとも 1 つが指定された条件を満たす場合、またはmicroSecondsパラメーターを超えた場合は、どちらか早い方を返します。 -1 に設定 microSeconds すると、無限のタイムアウトが指定されます。

に対して Connect非ブロッキング呼び出しを行った場合、書き込み可能性は正常に接続されたことを意味します。 既に接続が確立されている場合、書き込み可能とは、すべての送信操作がブロックされずに成功することを意味します。

に対して Connect非ブロッキング呼び出しを行った場合、 パラメーターは checkerror 正常に接続されていないソケットを識別します。

Note

1 つの SocketPoll状態のみを確認する場合は、 メソッドを使用します。

Note

この方法では、ネットワーク ケーブルの破損やリモート ホストが正常にシャットダウンされたなど、特定の種類の接続の問題を検出できません。 これらの種類のエラーを検出するには、データの送受信を試みる必要があります。

Note

を受け取った場合は SocketException、 プロパティを SocketException.ErrorCode 使用して特定のエラー コードを取得します。 このコードを取得したら、エラーの詳細な説明については、 Windows ソケット バージョン 2 API エラー コード のドキュメントを参照してください。

こちらもご覧ください

適用対象