Partager via


PFN_WSK_RECEIVE_FROM_EVENT fonction de rappel (wsk.h)

La fonction de rappel d’événement WskReceiveFromEvent informe une application WSK qu’un ou plusieurs datagrammes ont été reçus sur un socket de datagramme.

Syntaxe

PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;

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

Paramètres

[in, optional] SocketContext

Pointeur vers le contexte de socket pour le socket de datagramme qui a reçu les datagrammes. L’application WSK a fourni ce pointeur au sous-système WSK lorsqu’elle a appelé la fonction WskSocket pour créer le socket de datagram.

[in] Flags

Valeur ULONG qui contient une or au niveau du bit d’une combinaison des indicateurs suivants :

MSG_BCAST

Les datagrammes ont été reçus en tant que diffusion de couche liaison ou avec une adresse de transport de destination qui est une adresse de diffusion.

MSG_MCAST

Les datagrammes ont été reçus avec une adresse de transport de destination qui est une adresse de multidiffusion.

WSK_FLAG_AT_DISPATCH_LEVEL

Le sous-système WSK appelé la fonction de rappel d’événement WskReceiveFromEvent à IRQL = DISPATCH_LEVEL. Si cet indicateur n’est pas défini, le sous-système WSK peut avoir appelé la fonction de rappel d’événement WskReceiveFromEvent à n’importe quelle <IRQL = DISPATCH_LEVEL.

[in, optional] DataIndication

Pointeur vers une liste liée de structures WSK_DATAGRAM_INDICATION qui décrivent les datagrammes reçus. Si ce paramètre est NULL, le socket n’est plus fonctionnel et l’application WSK doit appeler la fonction WskCloseSocket pour fermer le socket dès que possible.

Valeur de retour

La fonction de rappel d’événement WskReceiveFromEvent d’une application WSK peut retourner l’un des codes NTSTATUS suivants :

Retourner le code Description
STATUS_SUCCESS
L’application WSK a accepté les datagrammes et récupéré tous les datagrammes de la liste liée de structures WSK_DATAGRAM_INDICATION. Le sous-système WSK peut appeler à nouveau la fonction de rappel d’événement WskReceiveFromEvent lorsque de nouveaux datagrammes sont reçus sur le socket.
STATUS_PENDING
L’application WSK a accepté les datagrammes, mais n’a pas récupéré tous les datagrammes de la liste liée de structures WSK_DATAGRAM_INDICATION. L’application WSK conserve la liste liée des structures de WSK_DATAGRAM_INDICATION jusqu’à ce que tous les datagrammes aient été récupérés. Une fois que l’application WSK a récupéré tous les datagrammes, elle appelle la fonction WskRelease pour libérer la liste liée des structures WSK_DATAGRAM_INDICATION vers le sous-système WSK. Le sous-système WSK peut appeler à nouveau la fonction de rappel d’événement WskReceiveFromEvent lorsque de nouveaux datagrammes sont reçus sur le socket.
STATUS_DATA_NOT_ACCEPTED
L’application WSK n’a pas accepté les datagrammes. Si une application WSK retourne ce code d’état, le sous-système WSK répond différemment en fonction de la façon dont l’application WSK a activé la fonction de rappel d’événements WskReceiveFromEvent.
  • Si l’application WSK a activé la fonction de rappel d’événement WskReceiveFromEvent à l’aide de l’option de socket SO_WSK_EVENT_CALLBACK, le sous-système WSK aura le tampon de transport sous-jacent les datagrammes si possible ou si nécessaire par le protocole. Le sous-système WSK désactive la fonction de rappel d’événement WskReceiveFromEvent et n’appelle pas la fonction de rappel d’événements WskReceiveFromEvent jusqu’à ce que l’application WSK réactive cette fonction de rappel d’événement avec l’option de socket SO_WSK_EVENT_CALLBACK. Une fois que l’application WSK a réactivé la fonction de rappel d’événement WskReceiveFromEvent, le sous-système WSK reprend l’appel de la fonction de rappel d’événement WskReceiveFromEvent avec les datagrammes mis en mémoire tampon restantes et lorsque de nouveaux datagrammes sont reçus sur le socket.
  • Si l’application WSK a activé la fonction de rappel d’événement WskReceiveFromEvent à l’aide de la fonction de rappel d’événements WSK_SET_STATIC_EVENT_CALLBACKS opération de contrôle client, le sous-système WSK ne désactive pas la fonction de rappel d’événement WskReceiveFromEvent. Le sous-système WSK continuera d’appeler la fonction de rappel d’événement WskReceiveFromEvent lorsque de nouveaux datagrammes sont reçus sur le socket.

Remarques

Le sous-système WSK appelle la fonction de rappel d’événement WSK WskReceiveFromEvent lorsque de nouveaux datagrammes sont reçus sur un socket de datagramme uniquement si la fonction de rappel d’événement a été précédemment activée avec l’option de socket SO_WSK_EVENT_CALLBACK. Pour plus d’informations sur l’activation des fonctions de rappel d’événements d’un socket, consultez Fonctions d’activation et de désactivation des fonctions de rappel d’événements.

Si la fonction de rappel d’événement WskReceiveFromEvent d’une application WSK est activée sur un socket de datagramme et que l’application a également un appel en attente à la fonction WskReceiveFrom sur le même socket de datagram, ensuite, lorsque les datagrammes arrivent, l’appel en attente à la fonction WskReceiveFrom est prioritaire sur la fonction de rappel d’événement WskReceiveFromEvent. Le sous-système WSK appelle la fonction de rappel d’événements WskReceiveFromEvent uniquement s’il n’y a pas d’IRPs mis en file d’attente à partir des appels en attente à la fonction WskReceiveFrom. Toutefois, une application WSK ne doit pas supposer que le sous-système WSK n’appelle pas la fonction de rappel d’événement WskReceiveFromEvent WskReceiveFromEvent pour un socket de datagramme qui a un appel en attente à la fonction WskReceiveFrom. Les conditions de concurrence existent dans lesquelles le sous-système WSK peut toujours appeler la fonction de rappel d’événement WSK WskReceiveFromEvent pour le socket. La seule façon pour une application WSK de s’assurer que le sous-système WSK n’appelle pas la fonction de rappel d’événement WskReceiveFromEvent de l' application sur un socket de datagram consiste à désactiver la fonction de rappel d’événement WskReceiveFromEvent de l’application sur le socket.

Le sous-système WSK appelle la fonction de rappel d’événement WSK WskReceiveFromEvent à IRQL <= DISPATCH_LEVEL.

La fonction de rappel d’événements WskReceiveFromEvent d’une application WSK ne doit pas attendre la fin d’autres requêtes WSK dans le contexte des fonctions de rappel d’événements ou de fin WSK. Le rappel peut lancer d’autres requêtes WSK (en supposant qu’il ne passe pas trop de temps à DISPATCH_LEVEL), mais il ne doit pas attendre leur achèvement même lorsque le rappel est appelé à IRQL = PASSIVE_LEVEL.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
plateforme cible Windows
d’en-tête wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_DATAGRAM_INDICATION

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskRelease

WskSendTo

WskSocket