Condividi tramite


PFN_WSK_RECEIVE_FROM_EVENT funzione di callback (wsk.h)

La funzione di callback dell'evento WskReceiveFromEvent notifica a un'applicazione WSK che uno o più datagrammi sono stati ricevuti in un socket di datagram.

Sintassi

PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;

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

Parametri

[in, optional] SocketContext

Puntatore al contesto del socket per il socket del datagram che ha ricevuto i datagrammi. L'applicazione WSK ha fornito questo puntatore al sottosistema WSK quando ha chiamato la funzione WskSocket per creare il socket di datagram.

[in] Flags

Valore ULONG che contiene un OR bit per bit di una combinazione dei flag seguenti:

MSG_BCAST

I datagrammi sono stati ricevuti come trasmissione a livello di collegamento o con un indirizzo di trasporto di destinazione che è un indirizzo di trasmissione.

MSG_MCAST

I datagrammi sono stati ricevuti con un indirizzo di trasporto di destinazione che è un indirizzo multicast.

WSK_FLAG_AT_DISPATCH_LEVEL

Il sottosistema WSK denominato funzione di callback dell'evento WskReceiveFromEvent in IRQL = DISPATCH_LEVEL. Se questo flag non è impostato, il sottosistema WSK potrebbe aver chiamato la funzione di callback dell'evento WskReceiveFromEvent in qualsiasi irQL <= DISPATCH_LEVEL.

[in, optional] DataIndication

Puntatore a un elenco collegato di strutture WSK_DATAGRAM_INDICATION che descrivono i datagrammi ricevuti. Se questo parametro è NULL, il socket non è più funzionale e l'applicazione WSK deve chiamare la funzione WskCloseSocket per chiudere il socket il prima possibile.

Valore restituito

La funzione di callback dell'evento WskReceiveFromEvent di un'applicazione WSK può restituire uno dei codici NTSTATUS seguenti:

Codice restituito Descrizione
STATUS_SUCCESS
L'applicazione WSK accetta i datagrammi e recupera tutti i datagrammi dall'elenco collegato di WSK_DATAGRAM_INDICATION strutture. Il sottosistema WSK può chiamare nuovamente la funzione di callback eventi WskReceiveFromEvent quando vengono ricevuti nuovi datagrammi nel socket.
STATUS_PENDING
L'applicazione WSK ha accettato i datagrammi, ma non ha recuperato tutti i datagrammi dall'elenco collegato di WSK_DATAGRAM_INDICATION strutture. L'applicazione WSK mantiene l'elenco collegato di strutture WSK_DATAGRAM_INDICATION fino a quando non sono stati recuperati tutti i datagrammi. Dopo che l'applicazione WSK ha recuperato tutti i datagrammi, chiama la funzione WskRelease per rilasciare l'elenco collegato di strutture WSK_DATAGRAM_INDICATION tornare al sottosistema WSK. Il sottosistema WSK può chiamare nuovamente la funzione di callback eventi WskReceiveFromEvent quando vengono ricevuti nuovi datagrammi nel socket.
STATUS_DATA_NOT_ACCEPTED
L'applicazione WSK non accettava i datagrammi. Se un'applicazione WSK restituisce questo codice di stato, il sottosistema WSK risponderà in modo diverso a seconda del modo in cui l'applicazione WskReceiveFromEvent ha abilitato la funzione di callback degli eventi WskReceiveFromEvent .
  • Se l'applicazione WSK ha abilitato la funzione di callback dell'evento WskReceiveFromEvent usando l'opzione socket SO_WSK_EVENT_CALLBACK , il sottosistema WSK avrà il buffer di trasporto sottostante, se possibile o se necessario dal protocollo. Il sottosistema WSK disabilita la funzione di callback dell'evento WskReceiveFromEvent e non chiamerà nuovamente la funzione di callback dell'evento WskReceiveFromEvent fino a quando l'applicazione WSK riabilita la funzione di callback dell'evento con l'opzione socket SO_WSK_EVENT_CALLBACK. Dopo che l'applicazione WSK ha riabilitata la funzione di callback dell'evento WskReceiveFromEvent , il sottosistema WSK riprenderà a chiamare la funzione di callback dell'evento WskReceiveFromEvent con eventuali datagrammi buffer rimanenti e quando vengono ricevuti nuovi datagrammi nel socket.
  • Se l'applicazione WSK ha abilitato la funzione di callback dell'evento WskReceiveFromEvent usando WSK_SET_STATIC_EVENT_CALLBACKS'operazione di controllo client, il sottosistema WSK non disabilita la funzione di callback dell'evento WskReceiveFromEvent . Il sottosistema WSK continuerà a chiamare la funzione di callback dell'evento WskReceiveFromEvent quando vengono ricevuti nuovi datagrammi nel socket.

Commenti

Il sottosistema WSK chiama la funzione di callback dell'evento WskReceiveFromEvent dell'applicazione WskReceiveFromEvent quando vengono ricevuti nuovi datagrammi in un socket di datagram solo se la funzione di callback dell'evento è stata abilitata in precedenza con l'opzione socket SO_WSK_EVENT_CALLBACK . Per altre informazioni sull'abilitazione delle funzioni di callback degli eventi di un socket, vedere Abilitazione e disabilitazione delle funzioni di callback degli eventi.

Se la funzione di callback dell'evento WskReceiveFromEvent di un'applicazione WskReceiveFrom è abilitata in un socket di datagrammi e l'applicazione ha anche una chiamata in sospeso alla funzione WskReceiveFrom nello stesso socket di datagrammi, quando arrivano i datagrammi, la chiamata in sospeso alla funzione WskReceiveFrom avrà la precedenza sulla funzione di callback dell'evento WskReceiveFromEvent . Il sottosistema WSK chiama la funzione di callback dell'evento WskReceiveFromEvent dell'applicazione solo se non sono presenti gruppi di integrazione accodati da chiamate in sospeso alla funzione WskReceiveFrom . Tuttavia, un'applicazione WSK non presuppone che il sottosistema WSK non chiamerà la funzione WskReceiveFromEvent dell'evento WskReceiveFromEvent per un socket di datagram con una chiamata in sospeso alla funzione WskReceiveFrom . Esistono condizioni di gara in cui il sottosistema WSK potrebbe comunque chiamare la funzione di callback dell'applicazione WskReceiveFromEvent per il socket. L'unico modo per un'applicazione WSK per assicurarsi che il sottosistema WSK non chiamerà la funzione di callback dell'evento WskReceiveFromEvent in un socket di datagram è disabilitare la funzione di callback dell'evento WskReceiveFromEvent dell'applicazione nel socket.

Il sottosistema WSK chiama la funzione di callback dell'evento WskReceiveFromEvent dell'applicazione WskReceiveFromEvent in IRQL <= DISPATCH_LEVEL.

La funzione di callback dell'evento WskReceiveFromEvent di un'applicazione WSK non deve attendere il completamento di altre richieste WSK nel contesto delle funzioni di completamento o callback degli eventi WSK. Il callback può avviare altre richieste WSK (presupponendo che non spenda troppo tempo in DISPATCH_LEVEL), ma non deve attendere il completamento anche quando il callback viene chiamato in IRQL = PASSIVE_LEVEL.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Windows
Intestazione wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

Vedi anche

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_DATAGRAM_INDICATION

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskRelease

WskSendTo

WskSocket