Socket.Select メソッド
アセンブリ: System (system.dll 内)

Public Shared Sub Select ( _ checkRead As IList, _ checkWrite As IList, _ checkError As IList, _ microSeconds As Integer _ )
Dim checkRead As IList Dim checkWrite As IList Dim checkError As IList Dim microSeconds As Integer Socket.Select(checkRead, checkWrite, checkError, microSeconds)
public: static void Select ( IList^ checkRead, IList^ checkWrite, IList^ checkError, int microSeconds )
public static function Select ( checkRead : IList, checkWrite : IList, checkError : IList, microSeconds : int )


Select は、1 つ以上の Socket インスタンスのステータスを決定する静的メソッドです。Select メソッドを使用するには、1 つ以上のソケットを IList に挿入する必要があります。ソケットが読み取り可能かどうかを確認するには、checkRead パラメータに IList を指定して Select を呼び出します。書き込み可能かどうかを確認するには、checkWrite パラメータを使用します。エラー条件を検出する場合は、checkError を使用します。Select を呼び出したら、IList には、その条件を満たすソケットだけが設定されます。
読み取り可能な状態では、待機状態の場合、Accept がブロックせずに正常に呼び出されます。接続を受け入れている場合は、読み取ることができるデータが存在することを意味します。いずれの場合も、すべての受信操作がブロックせずに正常に行われます。また、リモート Socket が接続をシャットダウンしているかどうかも示します。接続をシャットダウンしている場合は、Receive の実行がすぐに終了し、0 バイトが返されます。
少なくとも 1 つの関連するソケット (checkRead、checkWrite、および checkError の各リスト内のソケット) が指定した条件を満たしたか、または microSeconds パラメータが超過したかのいずれかが最初に発生したときに、Select から制御が戻ります。microSeconds を -1 に設定すると、無期限のタイムアウトが指定されます。
Connect を非ブロッキングで呼び出す場合、書き込み可能とは正常に接続が確立されていることを意味します。既に接続が確立されている場合は、すべての送信操作がブロックせずに正常に行われます。
Connect を非ブロッキングで呼び出した場合は、checkerror パラメータが正常に接続されていないソケットを特定します。
![]() |
---|

Select を使用し、待機中のどのソケットが接続を要求しているかを判断するコード例を次に示します。
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
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(); }
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.get_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.set_Item(i, new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp)); ((Socket)listenList.get_Item(i)). Bind(new IPEndPoint(ipAddress, 11000 + i)); ((Socket)listenList.get_Item(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.get_Count(); i++) { acceptList.set_Item(i, ((Socket)listenList.get_Item(i)).Accept()); }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からSocket.Select メソッドを検索する場合は、下記のリンクをクリックしてください。

- Socket.Select メソッドのページへのリンク