Chiusura di un socket SAN

Dopo l'opzione Windows Sockets su entrambi i lati di una connessione chiama la funzione WSPCloseSocket di un provider di servizi SAN, il provider di servizi SAN esegue la procedura seguente per chiudere un socket SAN:

  1. Ogni provider di servizi SAN su entrambi i lati della connessione abbatte la connessione e completa le richieste di ricezione. Le chiamate alla funzione WSPRecv restituiscono il codice di errore appropriato nel parametro lpErrno. Ad esempio, un provider di servizi SAN restituisce WSAECONNRESET per indicare che il peer remoto reimposta la connessione.

    Ogni provider di servizi SAN segnala anche il completamento di operazioni sovrapposte in sospeso per la chiusura del socket SAN. Il provider di servizi SAN chiama la funzione WPUCompleteOverlappedRequest per segnalare il completamento di un'operazione sovrapposta. In questa chiamata, il provider di servizi SAN passa un puntatore alla struttura WSAOVERLAPPED associata all'operazione sovrapposta. Il provider di servizi SAN passa anche il codice di errore WSA_OPERATION_ABORTED per specificare che l'operazione sovrapposta è stata annullata perché il socket SAN è stato chiuso. Prima di segnalare il completamento di un'operazione sovrapposta, il provider di servizi SAN deve rilasciare qualsiasi memoria necessaria per l'operazione.

  2. Dopo che il provider di servizi SAN ha effettuato up-calls, cioè chiamate alle funzioni con prefisso WPU, al commutatore utilizzando l'handle per il socket SAN ottenuto tramite un up-call di WPUCreateSocketHandle, il provider di servizi SAN deve fare una chiamata finale al commutatore utilizzando la funzione WPUCloseSocketHandle per chiudere l'handle del socket. Il provider di servizi SAN esegue quindi la pulizia di tutti gli elementi correlati al socket SAN. Le up-call sono chiamate di funzione dalla tabella di dispatch up-call del commutatore. L'interruttore fornisce un puntatore a questa tabella di dispatch up-call quando chiama la funzione WSPStartupEx del provider di servizi SAN per iniziare a usare il provider.

Purché un provider di servizi SAN esegua la procedura precedente per chiudere un socket SAN, l'interruttore si occupa di tutto il resto.

Per evitare le race condition tra un provider di servizi SAN e il commutatore che avvia la chiusura dei socket, il provider di servizi SAN non deve mai rilasciare strutture di dati correlate a un socket SAN fino a quando il commutatore chiama la funzione WSPCloseSocket.