Completamento delle richieste di trasferimento dei dati
L'opzione Windows Sockets trasferisce i dati in un socket SAN in modo asincrono. Ogni volta che l'opzione chiama la funzione WSPSend, WSPRecv, WSPRdmaWrite o WSPRdmaRead del provider di servizi SAN, specifica un puntatore a una struttura sovrapposta (WSAOVERLAPPED) e NULL per una routine di completamento. Anche se l'opzione chiama la funzione WSPEventSelect del provider di servizi SAN per indicare che il socket è in modalità non bloccante, il provider di servizi SAN non è necessario per implementare la semantica non bloccante per queste funzioni di trasferimento dei dati.
Come descritto nella documentazione dell'API Windows Sockets e spi nella documentazione di Microsoft Windows SDK, i socket bloccanti e non bloccanti gestiscono le stesse operazioni sovrapposte. Ovvero, il provider di servizi SAN avvia l'operazione di trasferimento dati specifica e quindi restituisce immediatamente il controllo all'opzione. Queste funzioni di trasferimento dei dati restituiscono il codice di errore WSA_IO_PENDING per indicare che un'operazione asincrona è stata avviata e che il completamento di tale operazione si verifica in un secondo momento. Al termine dell'operazione, il provider di servizi SAN segnala il completamento se l'opzione richiede una notifica di completamento, come descritto nei paragrafi seguenti.
Poiché l'opzione specifica sempre NULL per una routine di completamento per le operazioni di trasferimento dei dati sovrapposte, non è necessario un provider di servizi SAN per supportare il completamento tramite l'uso di chiamate di routine asincrone.
Quando possibile, il commutatore tenta di chiamare la funzione WSPGetOverlappedResult del provider di servizi SAN per eseguire il polling per il completamento delle richieste di trasferimento dei dati. In questo modo, l'opzione può evitare il sovraccarico associato a meccanismi di completamento sovrapposti attivi. Per indicare a un provider di servizi SAN che l'opzione non richiede la notifica di completamento per una determinata operazione di trasferimento dei dati sovrapposta, l'opzione imposta il bit in ordine basso del membro hEvent nella struttura WSAOVERLAPPED su uno. Il provider di servizi SAN non deve notificare il passaggio del completamento delle richieste inviate in questo modo.
Se l'opzione richiede la notifica del completamento di un'operazione di trasferimento dei dati sovrapposta, imposta il bit in ordine basso del membro hEvent nella struttura WSAOVERLAPPED su zero. Il provider di servizi SAN deve completare le operazioni di trasferimento dei dati avviate in questo modo chiamando la funzione WPUCompleteOverlappedRequest per segnalare il completamento. In questa chiamata, il provider di servizi SAN passa un puntatore alla struttura WSAOVERLAPPED che corrisponde a un'operazione di trasferimento dati completata. In questa chiamata WPUCompleteOverlappedRequest , il provider di servizi SAN passa anche il descrittore socket acquisito dal commutatore in una chiamata alla funzione WPUCreateSocketHandle . L'opzione riceve notifiche di completamento, le corrisponde alle richieste di I/O di un'applicazione e completa tali richieste di I/O, in base alle esigenze, per l'applicazione.