elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009
-
1 déc. 2009 à 09:54
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009
-
3 déc. 2009 à 10:06
Bonjour à tous,
J'ai une application qui communique en wifi entre deux machines linux en utilisant des liaisons UDP.
En fait la machine A envoie régulièrement des paquets à la machine B pour l'informer de son état. Lorsque la liaison est très perturbée, je constate que les paquets sont bufferisés et transmis au compte goutte. Dans une pareille situation je souhaiterais abandonner la transmission des vieux paquets et de ne tenter de transmettre que les dernières données à jour.
J'ai essayé de limiter la taille du buffer de sortie de la socket avec un setsockopt() sur le paramètre SO_SNDBUF.
Mais lorsque le débit chute, j'observe un gros retard sur mes données, j'en déduis que les vieux paquets sont toujours dans la queue.
cs_Lucky92
Messages postés180Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention16 août 20122 2 déc. 2009 à 19:07
Salut,
Il y a une autre explication possible au problème que tu observes...
Par défaut, lorsque la charge en émission devient un peu importante, au lieu d'envoyer les paquets à la demande, la socket "trainasse", c'est-à-dire qu'elle attend un peu que la pile se remplisse, pour envoyer une trame pleine d'un seul coup ! Ce comportement peut être inhibé en utilisant l'option SO_DONTLINGER.
Dans le doute, je te conseille d'essayer cette option, c'est rapide à tester et si le problème est bien celui-là, le résultat va être immédiat:)
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 3 déc. 2009 à 10:06
Bonjour,
Dans le man, il est dit que SO_DONTLINGER détermine le comportement de la socket lors d'un close (est ce qu'elle doit tenter d'envoyer les données ou pas). Ce qui n'est pas mon cas.
J'ai quand même essayé, mais j'observe toujours un retard de plusieurs secondes sur mes données.