Condividi tramite


Completamento delle richieste di trasferimento dei dati

L'opzione Windows Sockets trasferisce i dati su un socket SAN in modo asincrono. Ogni volta che il commutatore chiama la funzione di trasferimento dati del provider di servizi SAN come WSPSend, WSPRecv, WSPRdmaWrite, o WSPRdmaRead, esso specifica un puntatore a una struttura sovrapposta (WSAOVERLAPPED) e imposta 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 bloccata, il provider di servizi SAN non è tenuto a implementare la semantica non bloccata per queste funzioni di trasferimento dati.

Come descritto nella documentazione delle API e SPI Windows Sockets all'interno della documentazione del Microsoft Windows SDK , i socket bloccanti e non bloccanti gestiscono le operazioni sovrapposte allo stesso modo. Ovvero, il provider di servizi SAN avvia l'operazione di trasferimento dei dati specifica e quindi restituisce immediatamente il controllo allo switch. Queste funzioni di trasferimento dati restituiscono 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'interruttore specifica sempre NULL per una routine di completamento per le operazioni di trasferimento di dati sovrapposti, un provider di servizi SAN non è tenuto a supportare il completamento tramite l'uso di chiamate di routine asincrone.

Quando possibile, l'interruttore tenta di chiamare la funzione WSPGetOverlappedResult del provider di servizi SAN per eseguire il polling per il completamento delle richieste di trasferimento dati. In questo modo, l'interruttore può evitare il sovraccarico associato ai meccanismi di completamento sovrapposti attivi. Per indicare a un provider di servizi SAN che lo switch non richiede la notifica di completamento per una determinata operazione di trasferimento dati sovrapposti, lo switch imposta il bit di ordine inferiore del membro hEvent nella struttura WSAOVERLAPPED. 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 dati sovrapposta, imposta il bit di 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 funzioneWPUCompleteOverlappedRequestper 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 dallo switch 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.