Socket UDP linux

Signaler
Messages postés
56
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2009
-
Messages postés
56
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2009
-
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.

Avez vous des idées ?

2 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
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:)

Cordialement,
Lucky92.
Messages postés
56
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2009

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.