CSocket non riceve OnClose o OnReceive quando si disattiva la connessione di rete sul lato client

StackOverflow https://stackoverflow.com/questions/1908634

  •  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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top