TCP connessioni half-open

· Funzionalità

Una volta stabilita la connessione, se nessun peer invia alcun dato, nessun pacchetto viene inviato sulla rete. TCP è un protocollo idle, quindi assume che la connessione sia attiva.

Disconnection reasons

Detect Half-Open Disconnections 

You può try a rilevare disconnections utilizzando il seguente methods 

Second Connection

You può try a apre a secondo connessione e try a connetti ma questo presenta alcuni svantaggi, come consumare più risorse, creare nuovi thread... e se l'altro peer ha effettuato il reboot, la seconda connessione funzionerà ma la prima no.

Ping altro peer

If provi a inviare a ping o whatever messaggio con a connessione half-open, vedrai che non ottieni alcun errore.

Enable KeepAlive a TCP Socket level

A TCP keep-alive pacchetto è semplicemente an ACK con il sequence number impostare a uno less than il corrente sequence number per la connessione. Un host che riceve uno di questi ACK risponde con un ACK per il sequence number corrente. I keep-alive possono essere utilizzati per verificare che il computer all'estremità remota di una connessione sia ancora disponibile. TCP keep-alives può essere inviato once ogni TCPKeepAlive.Time (predefinito 7.200.000 millisecondi, ovvero due ore) se nessun altro dato o keep-alive di livello superiore è stato trasportato sulla connessione TCP. Se non c'è risposta a un keep-alive, viene ripetuto una volta ogni TCPKeepAlive.Interval secondi. KeepAliveInterval ha valore predefinito 1000 millisecondi.

You può abilitare per-connection KeepAlive e consentire che TCP protocol verifica se connessione è active o not. Questo è il metodo preferito se vuoi rilevare disconnessioni cadute (ad esempio: quando scolleghi un cavo di rete). Da sgcWebSockets 4.3.7 puoi abilitare la proprietà TCPKeepAlive per provare a rilevare queste connessioni half-open.

oClient := TsgcWebSocketClient.Create(nil);
oClient.TCPKeepAlive.Enabled := True;
oClient.TCPKeepAlive.Time := 3000;
oClient.TCPKeepAlive.Interval := 1000;