Installazione e rimozione della connessione
La funzioneWSAAcceptconsente a un'applicazione di ottenere informazioni sul chiamante, ad esempio l'identificatore del chiamante e la qualità del servizio, prima di decidere se accettare una richiesta di connessione in ingresso. Questa operazione viene eseguita con un callback a una funzione di condizione fornita dall'applicazione.
I dati da utente a utente specificati dai parametri nella funzione WSAConnect e la funzione della condizione di WSAAccept possono essere trasferiti al peer durante la creazione della connessione, purché questa funzionalità sia supportata dal provider di servizi.
È anche possibile (per i protocolli che supportano questa impostazione) scambiare i dati utente tra gli endpoint in fase di disinstallazione della connessione. La fine che avvia il teardown può chiamare la funzione WSASendDisconnect per indicare che non vengono inviati altri dati e per avviare la sequenza di disinstallazione della connessione. Per determinati protocolli, parte del disinstallazione è il recapito dei dati di disconnessione dall'iniziatore di disinstallazione. Dopo aver ricevuto avviso che l'endpoint remoto ha avviato il teardown (in genere dall'indicazione FD_CLOSE), la funzioneWSARecvDisconnectpuò essere chiamata per ricevere i dati di disconnessione, se presenti.
Per illustrare come usare i dati di disconnessione, considerare lo scenario seguente. La metà client di un'applicazione client/server è responsabile della terminazione di una connessione socket. Coincidente con la terminazione, fornisce (usando i dati di disconnessione) il numero totale di transazioni elaborate con il server. Il server a sua volta risponde con il totale cumulativo delle transazioni elaborate con tutti i client. La sequenza di chiamate e indicazioni può verificarsi nel modo seguente:
Lato client | Lato server |
---|---|
(1) Richiamare WSASendDisconnect per concludere la sessione e fornire il totale delle transazioni. | |
(2) Ottenere FD_CLOSE, recv con un valore restituito pari a zero o errore WSAEDISCON restituito da WSARecv che indica un arresto normale in corso. | |
(3) Richiamare WSARecvDisconnect per ottenere il totale delle transazioni del client. | |
(4) Calcolo totale complessivo cumulativo di tutte le transazioni. | |
(5) Richiamare WSASendDisconnect per trasmettere il totale complessivo. | |
(6) Ricevere FD_CLOSE indicazione. | (5a) Richiamare closesocket. |
(7) Richiamare WSARecvDisconnect per ricevere e archiviare il totale complessivo cumulativo delle transazioni. | |
(8) Richiamare closesocket |
Si noti che il passaggio (5a) deve seguire il passaggio (5), ma non ha alcuna relazione di intervallo con il passaggio (6), (7) o (8).