Compartir a través de


LPFN_RIODEQUEUECOMPLETION función de devolución de llamada (mswsock.h)

La función RIODequeueCompletion quita las entradas de una cola de finalización de E/S para su uso con las extensiones de E/S registradas de Winsock.

Sintaxis

LPFN_RIODEQUEUECOMPLETION LpfnRiodequeuecompletion;

ULONG LpfnRiodequeuecompletion(
  RIO_CQ CQ,
  PRIORESULT Array,
  ULONG ArraySize
)
{...}

Parámetros

CQ

Descriptor que identifica una cola de finalización de E/S.

Array

Matriz de estructuras RIORESULT para recibir la descripción de las finalizaciones desqueuadas.

ArraySize

Número máximo de entradas de la matriz que se va a escribir.

Valor devuelto

Si no se produce ningún error, la función RIODequeueCompletion devuelve el número de entradas de finalización quitadas de la cola de finalización especificada. De lo contrario, se devuelve un valor de RIO_CORRUPT_CQ para indicar que el estado del RIO_CQ pasado en el parámetro CQ se ha dañado debido a daños en la memoria o al uso incorrecto de las funciones RIO.

Comentarios

La función RIODequeueCompletion quita las entradas de una cola de finalización de E/S para enviar y recibir solicitudes con las extensiones de E/S registradas de Winsock.

La función RIODequeueCompletion es el mecanismo por el que una aplicación puede obtener información sobre las solicitudes de envío y recepción completadas. Normalmente, una aplicación llama a la función RIODequeueCompletion después de recibir una notificación basada en el método registrado con la función RIONotify cuando la cola de finalización no está vacía. El comportamiento de notificación de una cola de finalización de E/S se establece cuando se crea el RIO_CQ . La estructura RIO_NOTIFICATION_COMPLETION que determina el comportamiento de notificación se pasa a la función RIOCreateCompletionQueue cuando se crea un RIO_CQ .

Cuando se completa la función RIODequeueCompletion , el parámetro Array contiene una matriz de punteros a estructuras RIORESULT para las solicitudes de envío y recepción completadas que se han quitado de la cola. Los miembros de las estructuras RIORESULT devueltas proporcionan información sobre el estado de finalización de la solicitud completada y el número de bytes transferidos. Cada estructura RIORESULT devuelta también incluye un contexto de socket y un contexto de aplicación que se puede usar para identificar la solicitud completada específica.

Si la cola de finalización de E/S pasada en el parámetro CQ no es válida o está dañada, la función RIODequeueCompletion devuelve un recuento de RIO_CORRUPT_CQ.

La función RIODequeueCompletion devuelve un valor de cero si no hay solicitudes de envío o recepción completadas que se van a quitar de la cola.

Solo después de que se haya quitado la cola de una solicitud, el sistema libera la asociación a su búfer y registro de búfer, junto con su cargo de cuota.

Nota

Con fines de eficacia, el acceso a las colas de finalización (RIO_CQ structs) y las colas de solicitudes (RIO_RQ structs) no están protegidas por primitivos de sincronización. Si necesita acceder a una cola de finalización o solicitud desde varios subprocesos, el acceso debe coordinarse mediante una sección crítica, un bloqueo de escritura de lector delgado o un mecanismo similar. Este bloqueo no es necesario para el acceso mediante un único subproceso. Los distintos subprocesos pueden acceder a solicitudes o colas de finalización independientes sin bloqueos. La necesidad de sincronización solo se produce cuando varios subprocesos intentan acceder a la misma cola. La sincronización también es necesaria si varios subprocesos emite y recibe en el mismo socket porque las operaciones de envío y recepción usan la cola de solicitudes del socket.

 

Nota

El puntero de función a la función RIODequeueCompletion debe obtenerse en tiempo de ejecución realizando una llamada a la función WSAIoctl con el SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER código de operación especificado. El búfer de entrada pasado a la función WSAIoctl debe contener WSAID_MULTIPLE_RIO, un identificador único global (GUID) cuyo valor identifica las funciones de extensión de E/S registradas de Winsock. Si se ejecuta correctamente, la salida devuelta por la función WSAIoctl contiene un puntero a la estructura RIO_EXTENSION_FUNCTION_TABLE que contiene punteros a las funciones de extensión de E/S registradas de Winsock. El SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL se define en el archivo de encabezado Ws2def.h . El GUID de WSAID_MULTIPLE_RIO se define en el archivo de encabezado Mswsock.h .

 

Windows Phone 8: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8 y versiones posteriores.

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.

Seguridad para subprocesos

Si varios subprocesos intentan acceder al mismo RIO_CQ mediante la función RIODequeueCompletion , el acceso debe coordinarse mediante una sección crítica, un bloqueo de escritura de lector delgado o un mecanismo de exclusión mutua similar. Si las colas de finalización no se comparten, no se requiere la exclusión mutua.

Requisitos

Requisito Valor
Header mswsock.h