Partilhar via


Socket.Select Método

Definição

Sobrecargas

Nome Description
Select(IList, IList, IList, TimeSpan)

Determina o status de um ou mais soquetes.

Select(IList, IList, IList, Int32)

Determina o status de um ou mais soquetes.

Select(IList, IList, IList, TimeSpan)

Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs

Determina o status de um ou mais soquetes.

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)

Parâmetros

checkRead
IList

Uma IList das Socket instâncias para verificar a legibilidade.

checkWrite
IList

Uma IList das Socket instâncias para verificar a capacidade de gravação.

checkError
IList

Uma IList das Socket instâncias para verificar se há erros.

timeout
TimeSpan

O valor do tempo limite. Um valor igual a -1 microssegundos indica um tempo limite infinito.

Exceções

Os checkReadparâmetros e checkError os checkWriteparâmetros estão todos null ou vazios. Pelo menos um de checkRead, checkWriteou checkError deve conter pelo menos um Socket.

O checkReadparâmetro , checkWriteou checkError contém muitos soquetes.

O timeout foi menor que -1 microssegundos ou maior que MaxValue microssegundos

Erro ao tentar acessar o soquete.

Um ou mais soquetes foram descartados.

Aplica-se a

Select(IList, IList, IList, Int32)

Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs

Determina o status de um ou mais soquetes.

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)

Parâmetros

checkRead
IList

Uma IList das Socket instâncias para verificar a legibilidade.

checkWrite
IList

Uma IList das Socket instâncias para verificar a capacidade de gravação.

checkError
IList

Uma IList das Socket instâncias para verificar se há erros.

microSeconds
Int32

O valor de tempo limite, em microssegundos. Um valor -1 indica um tempo limite infinito.

Exceções

Os checkReadparâmetros e checkError os checkWriteparâmetros estão todos null ou vazios. Pelo menos um de checkRead, checkWriteou checkError deve conter pelo menos um Socket.

Erro ao tentar acessar o soquete.

.NET 5 e posterior: um ou mais soquetes são descartados.

O checkReadparâmetro , checkWriteou checkError contém muitos soquetes.

Exemplos

O exemplo de código a seguir usa para determinar quais soquetes Select de escuta têm uma solicitação de conexão.

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

Comentários

Select é um método estático que determina o status de uma ou mais Socket instâncias. Você deve colocar um ou mais soquetes em um IList antes de poder usar o Select método. Verifique se há legibilidade chamando Select com o IList parâmetro como o checkRead parâmetro. Para verificar se os soquetes estão em busca de gravabilidade, use o checkWrite parâmetro. Para detectar condições de erro, use checkError. Após a chamada Select, ele IList será preenchido apenas com os soquetes que atendem às condições.

Se você estiver em um estado de escuta, a legibilidade significa que uma chamada será Accept bem-sucedida sem bloquear. Se você já aceitou a conexão, a legibilidade significa que os dados estão disponíveis para leitura. Nesses casos, todas as operações de recebimento terão êxito sem bloqueio. A legibilidade também pode indicar se o remoto Socket desligou a conexão; nesse caso, uma chamada será Receive retornada imediatamente, com zero bytes retornados.

Select retorna quando pelo menos um dos soquetes de interesse (os soquetes no checkRead, checkWritee checkError listas) atende aos critérios especificados, ou o microSeconds parâmetro é excedido, o que vier primeiro. A configuração microSeconds para -1 especifica um tempo limite infinito.

Se você fizer uma chamada sem bloqueio, a Connectgravabilidade significa que você se conectou com êxito. Se você já tiver uma conexão estabelecida, a gravabilidade significa que todas as operações de envio terão êxito sem bloqueio.

Se você tiver feito uma chamada sem bloqueio, Connecto checkerror parâmetro identificará soquetes que não se conectaram com êxito.

Nota

Use o Poll método se você quiser determinar apenas o status de um único Socket.

Nota

Esse método não pode detectar determinados tipos de problemas de conexão, como um cabo de rede quebrado, ou que o host remoto foi desligado sem êxito. Você deve tentar enviar ou receber dados para detectar esses tipos de erros.

Nota

Se você receber um SocketException, use a SocketException.ErrorCode propriedade para obter o código de erro específico. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.

Confira também

Aplica-se a