CSocket ne reçoit pas OnClose ou OnReceive lorsque vous désactivez la connexion réseau sur le côté client

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

  •  19-09-2019
  •  | 
  •  

Question

J'ai créé une application client serveur avec c ++ CSocket. lorsque je connecte le client au serveur et après que je ferme le client avec le bouton X normal ou fin de tâche avec taskmanager, CSocket serveur reçoit l'événement OnClose. Le problème est quand je désactiver la connexion Internet sur les fenêtres que le client est en cours d'exécution sur, serveur CSocket ne reçoit pas l'événement OnClose ni OnReceive!

est-ce que quelqu'un sait peut-être ce qui se passe?

Mise à jour: Je viens de tester et vu que le client n'a pas le OnClose aussi recieve! J'ai désactivé la connexion Internet sur les fenêtres que le client est en cours d'exécution sur!

Était-ce utile?

La solution

Le côté client est à l'arrêt sans être en mesure de fermer la connexion avec le serveur par l'intermédiaire d'un FIN ou RST. Pour le serveur de détecter que le client est mort, il doit soit disposer de données à envoyer (qui échouerait) ou doit envoyer TCP keepalive périodiques. TCP_KEEPALIVE peut être définie comme une option de socket.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top