Question

À l’heure actuelle, j’ai un serveur / client TCP simple. Je l'ai configuré pour que chaque fois qu'un client se connecte, il soit forké () et que la connexion elle-même soit placée dans une boucle infinie afin que la connexion reste ouverte. Le serveur reçoit des informations du client. Je vérifie que le nombre d'octets reçus est > 0. Cela a bien fonctionné jusqu'à présent pour déterminer si le client s'est déconnecté. Mais si le serveur se déconnecte, le client s’arrête aussi mais aucune erreur n’est définie. Comment puis-je vérifier que le serveur est toujours connecté?

Était-ce utile?

La solution

Lorsque l'autre extrémité se déconnectera, le socket deviendra lisible (un socket sur le socket ne bloquera pas) et le read () renverra 0 . C'est la manière habituelle de détecter la déconnexion (vous avez déjà l'impression de le faire côté serveur).

Si vous êtes bloqué dans un write () ou essayez de écrire sur un socket fermé à l'autre extrémité, votre processus recevra un SIGPIPE signal et write renverra -1 avec errno défini sur EPIPE .

L'action par défaut pour SIGPIPE consiste à terminer le processus. Par conséquent, si vous ne l'avez pas modifié, votre client va simplement mourir lorsqu'il essaiera d'écrire sur un serveur qui a disparu.

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