Este tema aún no ha recibido ninguna valoración - Valorar este tema

Socket.Select (Método)

Actualización: noviembre 2007

Determina el estado de uno o varios sockets.

Espacio de nombres:  System.Net.Sockets
Ensamblado:  System (en System.dll)
public static void Select(
	IList checkRead,
	IList checkWrite,
	IList checkError,
	int microSeconds
)
public static void Select(
	IList checkRead,
	IList checkWrite,
	IList checkError,
	int microSeconds
)
public static function Select(
	checkRead : IList, 
	checkWrite : IList, 
	checkError : IList, 
	microSeconds : int
)

Parámetros

checkRead
Tipo: System.Collections.IList
IList de las instancias de Socket cuya legibilidad se va a comprobar.
checkWrite
Tipo: System.Collections.IList
IList de las instancias de Socket cuya posibilidad de escritura se va a comprobar.
checkError
Tipo: System.Collections.IList
IList de instancias de Socket para comprobar si hay errores.
microSeconds
Tipo: System.Int32
Valor del tiempo de espera en microsegundos. Un valor de -1 indica un tiempo de espera infinito.
ExcepciónCondición
ArgumentNullException

El parámetro checkRead es null o está vacío.

y

El parámetro checkWrite es null o está vacío.

y

El parámetro checkError es null o está vacío.

SocketException

Se ha producido un error al intentar obtener acceso al socket. Vea la sección Comentarios para obtener más información.

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

En estado de escucha, la legibilidad implica que una llamada al método Accept se realizará correctamente y sin bloqueo. Si ya ha aceptado la conexión, la legibilidad implica que hay datos disponibles para la lectura. En estos casos, todas las operaciones de recepción se realizarán correctamente y sin bloqueos. La legibilidad también puede indicar si el Socket remoto cerró la conexión, en cuyo caso una llamada a Receive devolverá inmediatamente un valor de cero bytes.

Select devolverá un valor cuando se produzca una de las siguientes condiciones: que al menos uno de los sockets de interés (los incluidos en las listas de checkRead, checkWrite y checkError) cumpla con sus criterios o que se supere el parámetro microSeconds. Establecer microSeconds en -1 sirve para especificar un tiempo de espera infinito.

Si realiza una llamada que no sea de bloqueo a Connect, la posibilidad de escritura implica que la conexión se ha establecido correctamente. Si ya hay una conexión establecida, la posibilidad de escritura implica que todas las operaciones de envío se realizarán correctamente y sin bloqueo.

Si ha realizado una llamada que no sea de bloqueo a Connect, el parámetro checkerror identificará los sockets que no se hayan conectado correctamente.

hh4w5s03.alert_note(es-es,VS.90).gifNota:

Utilice el método Poll si únicamente desea determinar el estado de un solo Socket.

hh4w5s03.alert_note(es-es,VS.90).gifNota:

Este método no puede detectar ciertos problemas de conexión, como, por ejemplo, los debidos a un cable de red roto o a un cierre brusco del host remoto. Para detectar estos tipos de errores es necesario probar a enviar o recibir datos.

hh4w5s03.alert_note(es-es,VS.90).gifNota:

En caso de recibir una excepción SocketException, puede utilizar la propiedad SocketException.ErrorCode para obtener el código de error específico. Una vez obtenido este código, consulte en MSDN Library la documentación de códigos de error de la API de Windows Sockets, versión 2, para ver una descripción detallada del error.

En el siguiente ejemplo de código se utiliza 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();
}


IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostEntry.get_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.set_Item(i, new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp));
    ((Socket)listenList.get_Item(i)).
        Bind(new IPEndPoint(ipAddress, 11000 + i));
    ((Socket)listenList.get_Item(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.get_Count(); i++) {
    acceptList.set_Item(i, ((Socket)listenList.get_Item(i)).Accept());
}


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0
¿Te ha resultado útil?
(Caracteres restantes: 1500)

Adiciones de comunidad

AGREGAR
© 2013 Microsoft. Reservados todos los derechos.