Socket.Select メソッドとは? わかりやすく解説

Socket.Select メソッド

1 つ上のソケットステータス決定します

名前空間: System.Net.Sockets
アセンブリ: 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 void Select (
    IList^ checkRead, 
    IList^ checkWrite, 
    IList^ checkError, 
    int 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
)

パラメータ

checkRead

読み取り機能チェックする Socket インスタンスの IList。

checkWrite

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

checkError

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

microSeconds

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

例外例外
例外種類条件

ArgumentNullException

checkRead パラメータnull 参照 (Visual Basic では Nothing) または空です。

および

checkWrite パラメータnull 参照 (Visual Basic では Nothing) または空です。

および

checkError パラメータnull 参照 (Visual Basic では Nothing) または空です。

SocketException

ソケットへのアクセス試みているときにエラー発生しました詳細については「解説」を参照してください

解説解説

Select は、1 つ上の Socket インスタンスステータス決定する静的メソッドです。Select メソッド使用するには、1 つ上のソケットIList挿入する必要がありますソケット読み取り可能かどうか確認するには、checkRead パラメータIList指定して Select呼び出します。書き込み可能かどうか確認するには、checkWrite パラメータ使用しますエラー条件検出する場合は、checkError使用しますSelect呼び出したら、IList には、その条件を満たすソケットだけが設定されます。

読み取り可能な状態では、待機状態の場合Acceptブロックせずに正常に呼び出されます。接続受け入れている場合は、読み取ることができるデータ存在することを意味しますいずれの場合も、すべての受信操作ブロックせずに正常に行われますまた、リモート Socket接続シャットダウンしているかどうか示します接続シャットダウンしている場合は、Receive実行がすぐに終了し、0 バイト返されます。

少なくとも 1 つ関連するソケット (checkReadcheckWrite、および checkError の各リスト内のソケット) が指定した条件満たしたか、または microSeconds パラメータ超過したかのいずれか最初に発生したときに、Select から制御戻りますmicroSeconds を -1 に設定すると、無期限タイムアウト指定されます。

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

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

メモメモ

1 つSocketステータス判断するだけの場合は、Poll メソッド使用します

使用例使用例

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());
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からSocket.Select メソッドを検索した結果を表示しています。
Weblioに収録されているすべての辞書からSocket.Select メソッドを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からSocket.Select メソッド を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

Socket.Select メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Socket.Select メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS