Socket.Select メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーバーロード
| 名前 | 説明 |
|---|---|
| Select(IList, IList, IList, TimeSpan) |
1 つ以上のソケットの状態を決定します。 |
| Select(IList, IList, IList, Int32) |
1 つ以上のソケットの状態を決定します。 |
Select(IList, IList, IList, TimeSpan)
- ソース:
- Socket.cs
- ソース:
- Socket.cs
- ソース:
- 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)
パラメーター
- timeout
- TimeSpan
タイムアウト値。 マイクロ秒 -1 等しい値は、無限タイムアウトを示します。
例外
checkRead、checkWrite、およびcheckErrorパラメーターはすべてnullまたは空です。 少なくとも 1 つの checkRead、 checkWrite、または checkError に少なくとも 1 つの Socketが含まれている必要があります。
checkRead、checkWrite、またはcheckErrorパラメーターに含まれるソケットが多すぎます。
timeoutが -1 マイクロ秒未満か、MaxValue マイクロ秒より大きかった
ソケットにアクセスしようとしたときにエラーが発生しました。
1 つ以上のソケットが破棄されました。
適用対象
Select(IList, IList, IList, Int32)
- ソース:
- Socket.cs
- ソース:
- Socket.cs
- ソース:
- 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)
パラメーター
- microSeconds
- Int32
タイムアウト値 (マイクロ秒単位)。 -1 値は、無限のタイムアウトを示します。
例外
checkRead、checkWrite、およびcheckErrorパラメーターはすべてnullまたは空です。 少なくとも 1 つの checkRead、 checkWrite、または checkError に少なくとも 1 つの Socketが含まれている必要があります。
ソケットにアクセスしようとしたときにエラーが発生しました。
.NET 5 以降: 1 つ以上のソケットが破棄されます。
checkRead、checkWrite、またはcheckErrorパラメーターに含まれるソケットが多すぎます。
例
次のコード例では、 Select を使用して、接続要求を持つリッスン ソケットを特定します。
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 メソッドを使用する前に、1 つ以上のソケットをIListに配置する必要があります。
checkRead パラメーターとしてIListを使用してSelectを呼び出して、読みやすさを確認します。 ソケットの書き込み可能性を確認するには、 checkWrite パラメーターを使用します。 エラー状態を検出する場合は、 checkErrorを使用します。
Selectを呼び出すと、IListには条件を満たすソケットのみが入力されます。
リッスン状態の場合、読みやすさは、 Accept の呼び出しがブロックされずに成功することを意味します。 接続を既に受け入れている場合、読みやすさはデータが読み取り可能であることを意味します。 このような場合、すべての受信操作はブロックされずに成功します。 読みやすさは、リモート Socket が接続をシャットダウンしたかどうかを示すこともできます。その場合、 Receive の呼び出しはすぐに戻り、0 バイトが返されます。
Select は、対象のソケット ( checkRead、 checkWrite、および checkError リスト内のソケット) の少なくとも 1 つが指定された条件を満たす場合、または microSeconds パラメーターが先に達した場合に返されます。
microSecondsを -1 に設定すると、無限のタイムアウトが指定されます。
Connectに対して非ブロッキング呼び出しを行った場合、書き込み可能性は、正常に接続されたことを意味します。 既に接続が確立されている場合、書き込み可能性は、すべての送信操作がブロックされずに成功することを意味します。
Connectに対して非ブロッキング呼び出しを行った場合、checkerror パラメーターは正常に接続されていないソケットを識別します。
手記
この方法では、ネットワーク ケーブルの破損やリモート ホストが正常にシャットダウンされたなど、特定の種類の接続の問題を検出できません。 このようなエラーを検出するには、データの送受信を試みる必要があります。
手記
SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して特定のエラー コードを取得します。 このコードを取得したら、エラーの詳細な説明については、 Windows ソケット バージョン 2 の API エラー コード のドキュメントを参照してください。