Función WSAPoll (winsock2.h)

La función WSAPoll determina el estado de uno o varios sockets.

Sintaxis

int WSAAPI WSAPoll(
  [in, out] LPWSAPOLLFD fdArray,
  [in]      ULONG       fds,
  [in]      INT         timeout
);

Parámetros

[in, out] fdArray

Matriz de una o varias estructuras POLLFD que especifican el conjunto de sockets para los que se solicita el estado. La matriz debe contener al menos una estructura con un socket válido. Tras la devolución, este parámetro recibe los sockets actualizados con el miembro de marcas de estado revents establecido en cada uno que coincida con los criterios de consulta de estado.

[in] fds

Número de estructuras WSAPOLLFD en fdarray. No es necesariamente el número de sockets para los que se solicita el estado.

[in] timeout

Valor que especifica el comportamiento de espera, en función de los valores siguientes.

Valor Significado
Mayor que cero El tiempo, en milisegundos, que se esperará.
Cero Vuelva inmediatamente.
Menor que cero Espere indefinidamente.

Valor devuelto

Devuelve uno de los valores siguientes.

Valor devuelto Descripción
Cero No hay sockets en el estado consultado antes de que el temporizador haya expirado.
Mayor que cero El número de elementos de fdarray para los que un miembro revents de la estructura POLLFD es distinto de cero.
SOCKET_ERROR Se produjo un error. Llame a la función WSAGetLastError para recuperar el código de error extendido.
 
Código de error extendido Significado
WSAENETDOWN
Error en el subsistema de red.
WSAEFAULT
Se produjo una excepción al leer los parámetros de entrada del usuario.
WSAEINVAL
Se pasó un parámetro no válido. Este error se devuelve si las estructuras WSAPOLLFD apuntadas por el parámetro fdarray al solicitar el estado del socket. Este error también se devuelve si ninguno de los sockets especificados en el miembro fd de cualquiera de las estructuras WSAPOLLFD a las que apunta el parámetro fdarray eran válidos.
WSAENOBUFS
La función no pudo asignar memoria suficiente.

Comentarios

La función WSAPoll se define en Windows Vista y versiones posteriores.

Estructuras WSAPOLLFD . Una aplicación establece las marcas adecuadas en el miembro de eventos de la estructura WSAPOLLFD para especificar el tipo de estado solicitado para cada socket correspondiente. La función WSAPoll devuelve el estado de un socket en el miembro revents de la estructura WSAPOLLFD .

Para cada socket, un llamador puede solicitar información sobre el estado de lectura o escritura. Las condiciones de error siempre se devuelven, por lo que no es necesario solicitar información sobre ellas.

La estructura WSAPOLLFD apuntada por el parámetro fdarray . Todos los sockets que no cumplan estos criterios y que no tengan ninguna condición de error tendrán el miembro de revents correspondiente establecido en 0.

Una combinación de las marcas siguientes se puede establecer en la estructura WSAPOLLFD de un socket determinado al solicitar el estado de ese socket:

Marca Descripción
POLLPRI Los datos de prioridad se pueden leer sin bloqueo. Este indicador no es compatible con el proveedor de Microsoft Winsock.
POLLRDBAND Los datos de banda de prioridad (fuera de banda) se pueden leer sin bloquear.
POLLRDNORM Los datos normales se pueden leer sin bloqueo.
POLLWRNORM Los datos normales se pueden escribir sin bloqueo.
 

La marca POLLIN se define como la combinación de los valores de marca POLLRDNORM y POLLRDBAND . La marca POLLOUT se define como la misma que el valor de la marca POLLWRNORM .

La estructura WSAPOLLFD solo debe contener una combinación de las marcas anteriores compatibles con el proveedor Winsock. Los demás valores se consideran errores y WSAPoll devolverá SOCKET_ERROR. Una llamada posterior a la función WSAGetLastError recuperará el código de error extendido de WSAEINVAL. Si la marca POLLPRI está establecida en un socket para el proveedor De Microsoft Winsock, se producirá un error en la función WSAPoll .

Cuando las estructuras WSAPOLLFD apuntadas por el parámetro fdarray para indicar el estado del socket:

Marca Descripción
POLLERR Se ha producido un error.
POLLHUP Una conexión orientada a secuencias se desconecta o anula.
POLLNVAL Se usó un socket no válido.
POLLPRI Los datos de prioridad se pueden leer sin bloqueo. El proveedor de Microsoft Winsock no devuelve esta marca.
POLLRDBAND Los datos de banda de prioridad (fuera de banda) se pueden leer sin bloquear.
POLLRDNORM Los datos normales se pueden leer sin bloqueo.
POLLWRNORM Los datos normales se pueden escribir sin bloqueo.
 

Con respecto a los sockets TCP y UDP:

El número de elementos (no sockets) en fdarray se indica mediante nfds. Los miembros de fdarray que tienen su miembro fd establecido en un valor negativo se omiten y sus reventes se establecerán en POLLNVAL tras la devolución. Este comportamiento es útil para una aplicación que mantiene una asignación de fdarray fija y no compactará la matriz para quitar entradas no utilizada o reasignar la memoria. No es necesario borrar reventes para ningún elemento antes de llamar a WSAPoll.

El argumento timeout especifica cuánto tiempo debe esperar la función antes de devolverla. Un valor positivo contiene el número de milisegundos que se deben esperar antes de devolver. Un valor cero obliga a WSAPoll a devolver inmediatamente y un valor negativo indica que WSAPoll debe esperar indefinidamente.

Nota Al emitir una llamada de Winsock de bloqueo como WSAPoll con el parámetro de tiempo de espera establecido en un número negativo, Winsock puede necesitar esperar un evento de red antes de que se pueda completar la llamada. Winsock realiza una espera alertable en esta situación, que se puede interrumpir mediante una llamada de procedimiento asincrónica (APC) programada en el mismo subproceso. La emisión de otra llamada winsock de bloqueo dentro de un APC que interrumpió una llamada de Winsock de bloqueo en curso en el mismo subproceso provocará un comportamiento indefinido y los clientes winsock nunca deben intentarlo.
 
Nota A partir de Windows 10 versión 2004, cuando un socket TCP no se conecta, (POLLHUP \| POLLERR \| POLLWRNORM) se indica.
 

Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8.1, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado winsock2.h (incluya Winsock2.h)
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

WSAGetLastError

WSAPOLLFD