Condividi tramite


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).