2010-01-19 5 views
26

Dans Linux, on peut spécifier la valeur par défaut du système reçoivent la taille de la mémoire tampon pour les paquets de réseau, par exemple UDP, en utilisant les commandes suivantes:Spécifier UDP recevoir la taille de la mémoire tampon lors de l'exécution sous Linux

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) pour remplacer les valeurs par défaut du système en spécifiant la taille du tampon de réception par socket UDP en cours d'exécution?

Répondre

28

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 l'option SO_RCVBUF:

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 que c'est 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 autotuning depuis un moment maintenant (depuis 2.6.7, et avec reasonable maximum buffer sizes depuis 2.6.17), qui ajuste automatiquement la taille du tampon de réception en fonction de la charge. Sur les noyaux avec autoréglage, il est recommandé de ne pas définir la taille du tampon de réception en utilisant setsockopt, car cela désactivera l'autoréglage du noyau. Toutefois, l'utilisation de setsockopt pour ajuster la taille de la mémoire tampon peut être nécessaire sur d'autres plates-formes.

+0

juste ce que je cherchais :) Je me demande aussi, si j'ai spécifié la taille du tampon à une petite valeur, sera-t-il statique? Ou le système redimensionnera-t-il dynamiquement le tampon pour gérer la pression du trafic, le cas échéant? –

+0

J'ai développé un peu ma réponse pour mentionner l'autoréglage Linux TCP; sous Linux, si l'autoréglage est activé, vous ne devriez probablement pas ajuster la taille du tampon en utilisant 'setsockopt'; mais sur d'autres systèmes, vous pouvez toujours vouloir. –

+4

L'autoréglage s'applique uniquement à TCP ou s'applique à TCP et à UDP? – kumar

Questions connexes