2010-06-06 5 views
2

J'ai besoin d'écrire un limiteur de débit, qui effectuera certaines tâches chaque fois que X octets ont été transmis. Le plus simple est de vérifier la longueur de chaque paquet transmis, mais je pense que ce sera pour ralentir pour moi. Existe-t-il un moyen d'utiliser un type d'événement réseau, qui sera déclenché par les paquets/octets transmis?L'événement bytes transmis existe-t-il dans le noyau Linux?

Répondre

1

Je pense que vous pouvez regarder netfilter. En utilisant son API (au niveau du noyau), vous pouvez faire déclencher votre code personnalisé par des événements réseau, modifier les messages reçus avant de le passer à l'application, et ainsi de suite.

http://www.netfilter.org/

0

Il est dépendant de protocole, en fait. Mais pour TCP, vous pouvez setsockopt l'option SO_RCVLOWAT pour définir le nombre minimum d'octets (filigrane) pour permettre l'opération de lecture. Si vous devez également appliquer la taille maximale, ajustez la taille du tampon de réception à l'aide de SO_RCVBUF.