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