英語で読む

次の方法で共有


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 つ以上のソケットの状態を決定します。

C#
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, TimeSpan timeout);

パラメーター

checkRead
IList

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

checkWrite
IList

書き込み可能性を確認する Socket インスタンスの IList

checkError
IList

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

timeout
TimeSpan

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

例外

checkReadcheckWrite、および checkError パラメーターはすべて null または空です。 少なくとも 1 つの checkReadcheckWrite、または checkError に少なくとも 1 つの Socketが含まれている必要があります。

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

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

ソケットにアクセスしようとしたときにエラーが発生しました。

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

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.NET 7, 8, 9, 10

Select(IList, IList, IList, Int32)

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

1 つ以上のソケットの状態を決定します。

C#
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, int microSeconds);
C#
public static void Select(System.Collections.IList checkRead, System.Collections.IList checkWrite, System.Collections.IList checkError, int microSeconds);

パラメーター

checkRead
IList

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

checkWrite
IList

書き込み可能性を確認する Socket インスタンスの IList

checkError
IList

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

microSeconds
Int32

タイムアウト値 (マイクロ秒単位)。 -1 値は、無限のタイムアウトを示します。

例外

checkReadcheckWrite、および checkError パラメーターはすべて null または空です。 少なくとも 1 つの checkReadcheckWrite、または checkError に少なくとも 1 つの Socketが含まれている必要があります。

ソケットにアクセスしようとしたときにエラーが発生しました。

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

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

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

C#
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();
}

注釈

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

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

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

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

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

注意

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

注意

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

注意

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

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1