CSOCKET erhält nicht onclose oder onreceive, wenn Sie die Netzwerkverbindung auf der Client -Seite deaktivieren

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe eine Client -Serveranwendung mit C ++ - CSocket erstellt. Wenn ich den Client mit dem Server verbinde und danach den Client mit normaler X -Taste schließe oder mit TaskManager beende, empfängt Server CSocket das OnClose -Ereignis. Das Problem ist, wenn ich die Internetverbindung unter Windows deaktiviere, auf denen der Client ausgeführt wird, server CSocket weder das OnClose noch das OnReceive -Ereignis empfängt!

Weiß jemand möglicherweise, was los ist?

UPDATE: Ich habe gerade getestet und gesehen, dass der Kunde auch die Onclose auch nicht erhalten hat! Ich habe die Internetverbindung unter den Windows deaktiviert, auf denen der Client ausgeführt wird!

War es hilfreich?

Lösung

Die Client -Seite wird heruntergefahren, ohne die Verbindung zum Server über eine Flosse oder erstmals zu schließen. Damit der Server feststellt, dass der Client tot ist, muss er entweder Daten senden (was fehlschlagen würde) oder periodische TCP -Keepalive -Sonden senden muss. TCP_KEEPALIVE Kann als Socket -Option eingestellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top