Compartir a través de


PFN_WSK_RECEIVE_FROM_EVENT función de devolución de llamada (wsk.h)

La función de devolución de llamada de eventos WskReceiveFromEvent notifica a una aplicación WSK que se han recibido uno o varios datagramas en un socket de datagramas.

Sintaxis

PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;

NTSTATUS PfnWskReceiveFromEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in, optional] PWSK_DATAGRAM_INDICATION DataIndication
)
{...}

Parámetros

[in, optional] SocketContext

Puntero al contexto de socket para el socket de datagrama que ha recibido los datagramas. La aplicación WSK proporcionó este puntero al subsistema WSK cuando llamó a la función WskSocket para crear el socket de datagrama.

[in] Flags

Valor ULONG que contiene un OR bit a bit de una combinación de las marcas siguientes:

MSG_BCAST

Los datagramas se recibieron como una difusión de capa de vínculo o con una dirección de transporte de destino que es una dirección de difusión.

MSG_MCAST

Los datagramas se recibieron con una dirección de transporte de destino que es una dirección de multidifusión.

WSK_FLAG_AT_DISPATCH_LEVEL

El subsistema WSK llamó a la función de devolución de llamada de eventos WskReceiveFromEvent en IRQL = DISPATCH_LEVEL. Si no se establece esta marca, es posible que el subsistema WSK haya llamado a la función de devolución de llamada de eventos WskReceiveFromEvent en cualquier IRQL <= DISPATCH_LEVEL.

[in, optional] DataIndication

Puntero a una lista vinculada de estructuras de WSK_DATAGRAM_INDICATION que describen los datagramas recibidos. Si este parámetro es NULL, el socket ya no es funcional y la aplicación WSK debe llamar a la función WskCloseSocket para cerrar el socket lo antes posible.

Valor devuelto

La función de devolución de llamada de eventos WSK WskReceiveFromEvent de una aplicación WSK puede devolver uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
La aplicación WSK aceptó los datagramas y recuperó todos los datagramas de la lista vinculada de WSK_DATAGRAM_INDICATION estructuras. El subsistema WSK puede llamar de nuevo a la función de devolución de llamada de eventos WskReceiveFromEvent cuando se reciben nuevos datagramas en el socket.
STATUS_PENDING
La aplicación WSK aceptó los datagramas, pero no recuperó todos los datagramas de la lista vinculada de WSK_DATAGRAM_INDICATION estructuras. La aplicación WSK conserva la lista vinculada de estructuras de WSK_DATAGRAM_INDICATION hasta que se hayan recuperado todos los datagramas. Una vez que la aplicación WSK ha recuperado todos los datagramas, llama a la función WskRelease para liberar la lista vinculada de WSK_DATAGRAM_INDICATION estructuras al subsistema WSK. El subsistema WSK puede llamar de nuevo a la función de devolución de llamada de eventos WskReceiveFromEvent cuando se reciben nuevos datagramas en el socket.
STATUS_DATA_NOT_ACCEPTED
La aplicación WSK no aceptó los datagramas. Si una aplicación WSK devuelve este código de estado, el subsistema WSK responderá de forma diferente en función de cómo la aplicación WSK habilitó la función de devolución de llamada de eventos WskReceiveFromEvent .
  • Si la aplicación WSK habilitó la función de devolución de llamada de eventos WskReceiveFromEvent mediante la opción de socket SO_WSK_EVENT_CALLBACK , el subsistema WSK tendrá el búfer de transporte subyacente de los datagramas si es posible o si lo requiere el protocolo. El subsistema WSK deshabilitará la función de devolución de llamada de eventos WskReceiveFromEvent y no volverá a llamar a la función de devolución de llamada de eventos WskReceiveFromEvent hasta que la aplicación WSK vuelva a habilitar esta función de devolución de llamada de eventos con la opción de socket SO_WSK_EVENT_CALLBACK. Una vez que la aplicación WSK haya vuelto a habilitar la función de devolución de llamada de eventos WskReceiveFromEvent , el subsistema WSK reanudará la llamada a la función de devolución de llamada de eventos WskReceiveFromEvent con los datagramas almacenados en búfer restantes y cuando se reciban nuevos datagramas en el socket.
  • Si la aplicación WSK ha habilitado la función de devolución de llamada de eventos WskReceiveFromEvent mediante el uso de WSK_SET_STATIC_EVENT_CALLBACKS operación de control de cliente, el subsistema WSK no deshabilitará la función de devolución de llamada de eventos WskReceiveFromEvent . El subsistema WSK seguirá llamando a la función de devolución de llamada de eventos WskReceiveFromEvent cuando se reciban nuevos datagramas en el socket.

Comentarios

El subsistema WSK llama a la función de devolución de llamada de eventos WskReceiveFromEvent de una aplicación WSK cuando se reciben nuevos datagramas en un socket de datagrama solo si la función de devolución de llamada de eventos se ha habilitado previamente con la opción de socket SO_WSK_EVENT_CALLBACK . Para obtener más información sobre cómo habilitar las funciones de devolución de llamada de eventos de un socket, consulte Habilitación y deshabilitación de funciones de devolución de llamada de eventos.

Si la función de devolución de llamada de eventos WSK WskReceiveFromEvent de una aplicación WSK está habilitada en un socket de datagrama y la aplicación también tiene una llamada pendiente a la función WskReceiveFrom en el mismo socket de datagramas, cuando llegan los datagramas, la llamada pendiente a la función WskReceiveFrom tendrá prioridad sobre la función de devolución de llamada de eventos WskReceiveFromEvent . El subsistema WSK llama a la función de devolución de llamada de eventos WskReceiveFromEvent de la aplicación solo si no hay ningún IRP en cola de llamadas pendientes a la función WskReceiveFrom . Sin embargo, una aplicación WSK no debe suponer que el subsistema WSK no llamará a la función de devolución de llamada de eventos WskReceiveFromEvent de la aplicación para un socket de datagramas que tenga una llamada pendiente a la función WskReceiveFrom . Existen condiciones de carrera en las que el subsistema WSK todavía podría llamar a la función de devolución de llamada de eventos WSK de la aplicación WskReceiveFromEvent para el socket. La única manera de que una aplicación WSK asegúrese de que el subsistema WSK no llamará a la función de devolución de llamada de eventos WskReceiveFromEvent de la aplicación en un socket de datagrama es deshabilitar la función de devolución de llamada de eventos WskReceiveFromEvent de la aplicación en el socket.

El subsistema WSK llama a la función de devolución de llamada de eventos WSK WskReceiveFromEvent de una aplicación WSK en IRQL <= DISPATCH_LEVEL.

La función de devolución de llamada de eventos WSK WskReceiveFromEvent de una aplicación WSK no debe esperar a que se completen otras solicitudes WSK en el contexto de las funciones de finalización de WSK o devolución de llamada de eventos. La devolución de llamada puede iniciar otras solicitudes de WSK (suponiendo que no pasa demasiado tiempo en DISPATCH_LEVEL), pero no debe esperar a su finalización incluso cuando se llama a la devolución de llamada en IRQL = PASSIVE_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Windows
Encabezado wsk.h (incluya Wsk.h)
IRQL <= DISPATCH_LEVEL

Consulte también

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_DATAGRAM_INDICATION

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskRelease

WskSendTo

WskSocket