Configurazione della connessione e strappo
La funzione WSAAccept consente a un'applicazione di ottenere informazioni sul chiamante, ad esempio identificatore del chiamante e qualità del servizio prima di decidere se accettare una richiesta di connessione in ingresso. Questa operazione viene eseguita con un callback a una funzione condizione fornita dall'applicazione.
I dati da utente a utente specificati dai parametri nella funzione WSAConnect e la funzione condizione di WSAAccept possono essere trasferiti al peer durante l'istituzione della connessione, purché questa funzionalità sia supportata dal provider di servizi.
È anche possibile (per i protocolli che supportano questo) scambiare i dati utente tra gli endpoint in fase di strappo della connessione. La fine che avvia il teardown può chiamare la funzione WSASendDisconnect per indicare che non vengono inviati più dati e per avviare la sequenza di strappo della connessione. Per determinati protocolli, parte del teardown è il recapito dei dati di disconnessione dall'iniziatore di strappo. Dopo aver ricevuto un avviso che l'estremità remota ha avviato il teardown (in genere dall'indicazione FD_CLOSE), la funzione WSARecvDisconnect può essere chiamata per ricevere i dati di disconnessione, se presenti.
Per illustrare come è possibile usare i dati di disconnessione, considerare lo scenario seguente. La metà client di un'applicazione client/server è responsabile della terminazione di una connessione socket. Coincide con la terminazione, fornisce (usando dati disconnessi) il numero totale di transazioni elaborate con il server. Il server risponde a sua volta con il totale cumulativo di transazioni elaborate con tutti i client. La sequenza di chiamate e indicazioni può verificarsi come segue:
Lato client | Sul 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 l'arresto tolleranza in corso. | |
(3) Richiamare WSARecvDisconnect per ottenere il totale della transazione del client. | |
(4) Calcolo cumulativo totale totale di tutte le transazioni. | |
(5) Richiamare WSASendDisconnect per trasmettere il totale generale. | |
(6) Ricevere FD_CLOSE indicazione. | (5a) Richiamare closesocket. |
(7) Richiamare WSARecvDisconnect per ricevere e archiviare il totale cumulativo totale 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).