Socket.Select(IList, IList, IList, Int32) Método

Definição

Determina o estado 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);
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

Um IList dos Socket exemplos para verificar a legibilidade.

checkWrite
IList

Um IList dos Socket exemplos para verificar a capacidade de restrição.

checkError
IList

Um IList número de Socket instâncias para verificar erros.

microSeconds
Int32

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

Exceções

Os checkReadparâmetros , checkWrite, e checkError estão todos null ou vazios. Pelo menos um de checkRead, , ou checkError deve conter pelo menos um SocketcheckWrite.

Ocorreu um erro ao tentar aceder ao soquete.

.NET 5 e posteriores: Um ou mais sockets são descartados.

O checkRead, checkWrite, ou checkError parâmetro contém soquetes a mais.

Exemplos

O exemplo de código seguinte serve Select para determinar quais os sockets de escuta que têm um pedido de ligaçã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

Observações

Select é um método estático que determina o estado de uma ou mais Socket instâncias. Deve colocar um ou mais soquetes antes IList de poder usar o Select método. Verifique a legibilidade chamando Select com o IList como o checkRead parâmetro. Para verificar se os soquetes são impositivos, use o checkWrite parâmetro. Para detetar condições de erro, use checkError. Após chamar Select, o IList será preenchido apenas com os sockets que satisfazem as condições.

Se estiver num estado de escuta, legibilidade significa que uma chamada para Accept terá sucesso sem bloqueio. Se já aceitou a ligação, a legibilidade significa que os dados estão disponíveis para leitura. Nestes casos, todas as operações de receção terão sucesso sem bloqueio. A legibilidade também pode indicar se o comando Socket desligou a ligação; nesse caso, uma chamada para Receive retornará imediatamente, com zero bytes retornados.

Select retorna quando pelo menos um dos soquetes de interesse (os soquetes nos checkRead, checkWrite, e checkError lista) cumpre os seus critérios especificados, ou o microSeconds parâmetro é ultrapassado, o que ocorrer primeiro. Definir microSeconds para -1 especifica um tempo de espera infinito.

Se fizer uma chamada não bloqueante para Connect, a escrituração significa que se conectou com sucesso. Se já tiver uma ligação estabelecida, a gravabilidade significa que todas as operações de envio terão sucesso sem bloqueio.

Se fez uma chamada não bloqueante para Connect, o checkerror parâmetro identifica sockets que não se ligaram com sucesso.

Note

Use o Poll método se só quiser determinar o estado de um Socketúnico .

Note

Este método não consegue detetar certos tipos de problemas de ligação, como um cabo de rede partido, ou que o host remoto foi desligado de forma desajeitada. Deve tentar enviar ou receber dados para detetar este tipo de erros.

Note

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

Aplica-se a

Ver também