Salut à tous,
Je développe un petit programme de socket en mode RAW sous Linux que je pourrais résumer à ceci :
Lorsque j'exécute mon programme, d'après wireshark et ifconfig, je n'envois que 22 à 23 paquets soit un rendement de... 22 à 23%, évidemment ces chiffres peuvent varier légèrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int i = 0; for(i = 0; i < 100; i++) { sendto(/*blablabla*/); }
Pour être totalement efficace, je dois ajouter un usleep() qui laisse une petite pause pour laisser le temps d'envoyer proprement.
Or ce concept me dérange, que les paquets n'arrivent pas tous à destination, soit, c'est normal puisque les choses se font très rapidement. Mais que mes paquets ne soient pas tous envoyés me dérange, je préférerais que sendto bloque mais fasse son travail.
Que se passe-t-il concrètement ? Quelque chose sature ? La pile réseau, la socket, autre chose ?
La page de MAN dit que sendto ne garantie pas la bonne réception, or je devrais au moins pouvoir envoyer TOUS mes paquets même s'ils sont perdus et que le destinataire n'en reçoive que quelques-uns..
Pour résoudre ce problème, que faire ?
Partager