web-dev-qa-db-fra.com

Spécification de la taille du tampon de réception UDP lors de l'exécution sous Linux

Sous Linux, on peut spécifier la taille de tampon de réception par défaut du système pour les paquets réseau, par exemple UDP, en utilisant les commandes suivantes:

sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.rmem_default=<value>

Mais je me demande, est-il possible pour une application (par exemple, dans c) de remplacer les valeurs par défaut du système en spécifiant la taille du tampon de réception par socket UDP lors de l'exécution?

26
Mαzen

Vous pouvez augmenter la valeur par défaut, mais vous ne pouvez pas l'augmenter au-delà de la valeur maximale. Utilisez setsockopt pour modifier le SO_RCVBUF option:

int n = 1024 * 1024;
if (setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1) {
  // deal with failure, or ignore if you can live with the default size
}

Notez qu'il s'agit de la solution portable; il devrait fonctionner sur n'importe quelle plate-forme POSIX pour augmenter la taille du tampon de réception. Linux a eu autoréglage depuis un certain temps maintenant (depuis 2.6.7, et avec tailles de tampon maximales raisonnables depuis 2.6.17), qui ajuste automatiquement la taille du tampon de réception en fonction de la charge . Sur les noyaux avec réglage automatique, il est recommandé de ne pas définir la taille du tampon de réception à l'aide de setsockopt, car cela désactivera le réglage automatique du noyau. Cependant, l'utilisation de setsockopt pour ajuster la taille de la mémoire tampon peut être nécessaire sur d'autres plates-formes.

29
Brian Campbell