tcp timeouts - C - Programmation
Marsh Posté le 06-05-2011 à 12:26:00
Ton programme ne peut il envoyer un ping avec une granularité qui te convienne, pour détecter une rupture de connexion?
A+,
Marsh Posté le 06-05-2011 à 13:32:34
gilou a écrit : Ton programme ne peut il envoyer un ping avec une granularité qui te convienne, pour détecter une rupture de connexion? |
Salut
C'est ce que mon programme fait déjà car la détection de rupture se fait facilement sur un send. Mais le send de ce ping ne renvoie pas d'erreur ( code de retour = taille du buffer envoyé ) lors d'une rupture de connexion en débranchant le cable. Seul l'attente d'un délai suffisant permet d'avoir le code d'erreur de la part de ce ping.
La granularité choisie actuellement est de 1 sec.
Marsh Posté le 06-05-2011 à 16:16:31
Par programme, tu dois bien pouvoir mettre un timeout de 1s à un ping (ie un paquet ECHO ICMP), non?
Si tu as rien reçu au bout de 1s, tu fermes la socket et tu considères la machine comme inaccessible.
A+,
Marsh Posté le 06-05-2011 à 12:05:47
Bonjour
Je cherche à réduire le temps de détection d'une rupture de connexion réseau dans un de mes programmes sous linux.
Voila le schéma : j'ai un ensemble d'applications client-serveur et lorsque je quitte le serveur (proprement ou brutalement avec un CTRL-C) mon client détecte bien la rupture de connexion instantanément, sur un send ou un recv.
Par contre si ma rupture est provoquée par le débranchement du cable réseau les reliant (ou un élément dans la chaine ), alors le client ne détecte pas la rupture réseau avant un temps assez long ( entre 11 et 16 mn ce matin ).
J'ai tenté de modifier les valeurs tcp_keepalive_intvl tcp_keepalive_probes et tcp_keepalive_time du répertoire /proc ( echo xxx > variable ) et de relancer mon programme mais ça n'a aucune influence. Je n'ai pour le moment pas tenté de le faire via la fonction sysctl ( http://pwet.fr/man/linux/conventions/tcp ) mais je ne pense pas que cela change grand chose.
Surement parce que cela ne correspond pas à ce que je veux faire. En effet, les valeurs par défaut ne correspondent pas au comportement que j'ai eu : 7200s après une inactivé, 7 probes à intervalles de 75 sec , ce qui veut dire que par défaut, mon application couperait la connexion réseau au bout de 2h11mn ce qui n'est pas le cas.
Par conséquent, je tente de poser ma question ici, quelqu'un sait-il par quel appel système je peux modifier le timeout de la connexion tcp sur une rupture de cable réseau, et par quel appel système c'est détecté coté client ( au prochain send, ou au prochain recv ).
A savoir, apparemment sous windows le timeout est bien plus court ( 30sec me semble-t-il )
Je vous remercie d'avance