Condividi tramite


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