Compartir por


Socket.Select Método

Definición

Sobrecargas

Nombre Description
Select(IList, IList, IList, TimeSpan)

Determina el estado de uno o varios sockets.

Select(IList, IList, IList, Int32)

Determina el estado de uno o varios sockets.

Select(IList, IList, IList, TimeSpan)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Determina el estado de uno o varios sockets.

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

una IList de Socket instancias para comprobar la legibilidad.

checkWrite
IList

IList una de Socket instancias para comprobar la writy.

checkError
IList

de IListSocket instancias para comprobar si hay errores.

timeout
TimeSpan

Valor de tiempo de espera. Un valor igual a -1 microsegundos indica un tiempo de espera infinito.

Excepciones

Los checkReadparámetros , checkWritey checkError son todos null o están vacíos. Al menos uno de checkRead, checkWriteo checkError debe contener al menos un Socket.

El checkReadparámetro , checkWriteo checkError contiene demasiados sockets.

timeout era menor que -1 microsegundos o mayor que MaxValue microsegundos.

Error al intentar acceder al socket.

Se ha eliminado uno o varios sockets.

Se aplica a

Select(IList, IList, IList, Int32)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Determina el estado de uno o varios sockets.

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

una IList de Socket instancias para comprobar la legibilidad.

checkWrite
IList

IList una de Socket instancias para comprobar la writy.

checkError
IList

de IListSocket instancias para comprobar si hay errores.

microSeconds
Int32

Valor de tiempo de espera, en microsegundos. Un valor de -1 indica un tiempo de espera infinito.

Excepciones

Los checkReadparámetros , checkWritey checkError son todos null o están vacíos. Al menos uno de checkRead, checkWriteo checkError debe contener al menos un Socket.

Error al intentar acceder al socket.

.NET 5 y versiones posteriores: se eliminan uno o varios sockets.

El checkReadparámetro , checkWriteo checkError contiene demasiados sockets.

Ejemplos

En el ejemplo de código siguiente se usa Select para determinar qué sockets de escucha tienen una solicitud de conexión.

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

Comentarios

Select es un método estático que determina el estado de una o varias Socket instancias. Debe colocar uno o varios sockets en un IList para poder usar el Select método . Para comprobar la legibilidad, llame a Select con como IList parámetro checkRead . Para comprobar la writy de los sockets, use el checkWrite parámetro . Para detectar condiciones de error, use checkError. Después de llamar a Select, se IList rellenará con solo los sockets que cumplan las condiciones.

Si está en estado de escucha, la legibilidad significa que una llamada a Accept se realizará correctamente sin bloquearla. Si ya ha aceptado la conexión, la legibilidad significa que los datos están disponibles para la lectura. En estos casos, todas las operaciones de recepción se realizarán correctamente sin bloqueo. La legibilidad también puede indicar si el remoto Socket ha apagado la conexión; en ese caso, una llamada a Receive devolverá inmediatamente, con cero bytes devueltos.

Select devuelve cuando al menos uno de los sockets de interés (los sockets de las checkReadlistas , checkWritey checkError ) cumplen sus criterios especificados o el microSeconds parámetro se supera, lo que ocurra primero. Establecer microSeconds en -1 especifica un tiempo de espera infinito.

Si realiza una llamada sin bloqueo a Connect, la writy significa que se ha conectado correctamente. Si ya tiene establecida una conexión, la writy significa que todas las operaciones de envío se realizarán correctamente sin bloqueo.

Si ha realizado una llamada sin bloqueo a Connect, el checkerror parámetro identifica los sockets que no se han conectado correctamente.

Nota

Use el Poll método si solo desea determinar el estado de un solo Socket.

Nota

Este método no puede detectar ciertos tipos de problemas de conexión, como un cable de red roto o que el host remoto se cerró de forma incorrecta. Debe intentar enviar o recibir datos para detectar estos tipos de errores.

Nota

Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.

Consulte también

Se aplica a