2015-05-18 3 views
0

Я пытаюсь увеличить размер размера буфера приема сокета, используя setsockopt() в linux. Я могу установить его на любое значение ниже 244 КБ. Любое значение выше 244 КБ усекается до 244 КБ.Настройка размера буфера приема Socket, усекается до 244 КБ

Там, кажется, какой-то предел системы на месте, но я не могу понять, где она приходит, как это не соответствует значениям ниже:

$ cat /proc/sys/net/ipv4/tcp_rmem 
4096 87380 4194304 
$ cat /proc/sys/net/ipv4/tcp_wmem 
4096 16384 4194304 
$ cat /proc/sys/net/core/rmem_default 
124928 
$ cat /proc/sys/net/core/wmem_default 
124928 

Значение по умолчанию 87380 как и ожидалось, но я не могу увеличить его до 4194304. Он ограничивается 244 КБ. Интересно, что значение равно 2X rmem_default, нужно ли мне это изменить?

Благодаря

ответ

1

От страницы человека для TCP:

The maximum sizes for socket buffers declared via the SO_SNDBUF and 
    SO_RCVBUF mechanisms are limited by the global net.core.rmem_max and 
    net.core.wmem_max sysctls. Note that TCP actually allocates twice the 
    size of the buffer requested in the setsockopt(2) call, and so a suc- 
    ceeding getsockopt(2) call will not return the same size of buffer as 
    requested in the setsockopt(2) call 

Так что вы передаете для SO_SNDBUF/SO_RCVBUF удваивается в то время как распределение. И таким образом вы не можете передать максимальное значение (4194304) в setsockopt

+0

Спасибо, что я смог изменить его, изменив net.core.rmem_max – user3097669

Смежные вопросы