UDP reçoit la taille du tampon à l'exécution sous Linux

sous Linux, on peut spécifier la taille par défaut du tampon de réception du système pour les paquets réseau, disons 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 - ce possible pour une application (disons, en c) pour outrepasser 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
demandé sur Brian Campbell 2010-01-19 06:24:06

1 réponses

vous pouvez augmenter la valeur par défaut, mais vous ne pouvez pas l'augmenter au-delà de la valeur maximale. Utilisez setsockopt modifier 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; elle doit fonctionner sur N'importe quelle plateforme POSIX pour augmenter la taille du tampon de réception. Linux a eu autotuning pour un certain temps maintenant (depuis 2.6.7, et avec taille maximale raisonnable des tampons depuis 2.6.17), qui ajuste automatiquement le recevoir Taille du tampon basée sur la charge. Sur les noyaux avec autotuning, il est recommandé de ne pas définir la taille du tampon de réception en utilisant setsockopt, car cela va désactiver l'autotuning du noyau. En utilisant setsockopt pour ajuster la taille du tampon peut encore être nécessaire sur d'autres plateformes, cependant.

28
répondu Brian Campbell 2010-01-19 15:50:28