CSocket non riceve OnClose o OnReceive quando si disattiva la connessione di rete sul lato client
-
19-09-2019 - |
Domanda
Ho creato un'applicazione client-server con il C ++ CSocket. quando collego il client al server e dopo che chiudo il cliente con il tasto X normale o compito fine con taskmanager, CSocket server riceve l'evento OnClose. Il problema è quando ho disattivare la connessione Internet su Windows che il client è in esecuzione, CSocket server non riceve l'evento OnClose né OnReceive!
C'è qualcuno forse sa che cosa sta succedendo?
Aggiornamento: Ho appena provato e ho visto che il cliente non ha il recieve OnClose troppo! Ho disabilitato la connessione Internet sulle finestre che il client è in esecuzione su!
Soluzione
Il lato client è l'arresto senza essere in grado di chiudere la connessione al server tramite un FIN o RST. Per il server di rilevare che il cliente è morto si deve o avere dati da inviare (che sarebbe fallire) o deve inviare periodicamente le sonde TCP keepalive. TCP_KEEPALIVE
può essere impostata come opzione di presa.