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 |
---|---|
|
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. |
|
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. |
|
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 .
|
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 |