Condividi tramite


Funzione ProcessSocketNotifications (winsock2.h)

Associa un set di socket a una porta di completamento e recupera tutte le notifiche già in sospeso su tale porta. Una volta associata, la porta di completamento riceve le notifiche di stato del socket specificate. Sono supportati solo i socket del provider Microsoft Winsock .

Per ridurre il sovraccarico delle chiamate di sistema, è possibile registrarsi per le notifiche e recuperarle in una singola chiamata a ProcessSocketNotifications. In alternativa, è possibile recuperarli in modo esplicito chiamando le normali funzioni di porta di completamento I/O, ad esempio GetQueuedCompletionStatus. Le notifiche recuperate tramite ProcessSocketNotifications corrispondono a quelle recuperate usando GetQueuedCompletionStatusEx, che potrebbero includere pacchetti di notifica diversi dalle modifiche dello stato del socket.

I flag di evento di notifica sono il valore intero dei campi dwNumberOfBytesTransferred delle strutture OVERLAPPED_ENTRY restituite. È simile all'uso di JOBOBJECT_ASSOCIATE_COMPLETION_PORT, che usa anche il campo dwNumberOfBytesTransferred per inviare messaggi integer. Chiamare la funzione SocketNotificationRetrieveEvents per ottenerli.

Un handle socket può essere registrato in un solo IOCP alla volta. La registrazione di un handle socket registrato in precedenza sovrascrive la registrazione esistente. Prima di chiudere un handle usato per la registrazione, è consigliabile rimuovere in modo esplicito la registrazione e attendere la notifica di SOCK_NOTIFY_EVENT_REMOVE (vedere la sezione Osservazioni in questo argomento).

Per altre info ed esempi di codice, vedi Notifiche sullo stato del socket Winsock.

Sintassi

DWORD WSAAPI ProcessSocketNotifications(
  HANDLE                   completionPort,
  UINT32                   registrationCount,
  SOCK_NOTIFY_REGISTRATION *registrationInfos,
  UINT32                   timeoutMs,
  ULONG                    completionCount,
  OVERLAPPED_ENTRY         *completionPortEntries,
  UINT32                   *receivedEntryCount
);

Parametri

completionPort

Tipo: _In_ HANDLE

Handle per una porta di completamento I/O creata usando la funzione CreateIoCompletionPort . La porta verrà usata nel parametro CompletionPort della funzione PostQueuedCompletionStatus quando i messaggi vengono inviati per conto del socket.

registrationCount

Tipo: _In_ UINT32

Numero di registrazioni fornite da registrationInfos.

registrationInfos

Tipo: _Inout_updates_opt_(registrationCount) SOCK_NOTIFY_REGISTRATION*

Puntatore a una matrice di strutture SOCK_NOTIFY_REGISTRATION che definiscono i parametri di registrazione della notifica. Questi includono il socket di interesse, gli eventi di notifica di interesse e i flag dell'operazione. In caso di esito positivo, è necessario controllare gli elementi per verificare se la registrazione è stata elaborata correttamente. Questo argomento deve essere NULL se registrationCount è 0.

timeoutMs

Tipo: _In_ UINT32

Tempo in millisecondi in cui si è disposti ad attendere la visualizzazione di un pacchetto di completamento nella porta di completamento. Se un pacchetto di completamento non viene visualizzato entro il tempo specificato, la funzione scade e restituisce ERROR_TIMEOUT.

Se timeoutMs è INFINITE (0xFFFFFFFF), la funzione non si verifica mai il timeout. Se timeoutMs è 0 e non è presente alcuna operazione di I/O da rimuovere dalla coda, la funzione timeoutrà immediatamente.

Il valore di timeoutMs deve essere 0 se completionCount è 0.

completionCount

Tipo: _In_ ULONG

Numero massimo di strutture OVERLAPPED_ENTRY da rimuovere. Se si specifica 0, verranno elaborate solo le operazioni di registrazione.

completionPortEntries

Tipo: _Out_writes_to_opt_(completionCount, *receivedEntryCount) OVERLAPPED_ENTRY*

In base all'input, punta a una matrice preallocata di strutture OVERLAPPED_ENTRY . La matrice non deve sovrapporsi alla matrice registrationInfos . Il valore di completionPortEntries deve essere NULL se completionCount è 0.

Nell'output riceve una matrice di strutture OVERLAPPED_ENTRY che contengono le voci. Il numero di elementi della matrice viene fornito da ReceivedEntryCount. I campi dwNumberOfBytesTransferred delle strutture sono maschere integer degli eventi ricevuti. I campi lpOverlapped sono riservati e non devono essere utilizzati come puntatori.

receivedEntryCount

Tipo: _Out_opt_ UINT32*

Puntatore a una variabile che riceve il numero di voci rimosse. Deve essere NULL se completionCount è 0.

Valore restituito

In caso di esito positivo, restituisce ERROR_SUCCESS. Se la funzione ha avuto esito positivo e si è specificato un valore non 0 completionCount, ma non sono stati visualizzati pacchetti di completamento entro il tempo specificato, restituisce WAIT_TIMEOUT. In caso contrario, restituisce un codice di errore WSAE* appropriato.

Se viene restituito ERROR_SUCCESS o WAIT_TIMEOUT , è necessario esaminare i risultati della registrazione delle singole informazioni di registrazione. In caso contrario, l'intera operazione non è riuscita e non sono state apportate modifiche.

Commenti

Vedere SocketNotificationRetrieveEvents per gli eventi possibili quando viene ricevuta una notifica.

Requisiti

   
Client minimo supportato Windows 10 Build 20348
Server minimo supportato Windows 10 Build 20348
Intestazione winsock2.h
Libreria Ws2_32.lib
DLL Ws2_32.dll

Vedi anche