2014-01-15 3 views
3

При вызове setsockopt с SO_RECVBUF, а затем, поворачиваясь и вызывающий getockopt с SO_RECVBUF, кажется, говорит мне, что он устанавливает размер буфера в два раза больше, чем я попросил его установить. Кто-нибудь знает, почему это может быть?getsockopt SO_RECVBUF после выполнения набора показывает двойное значение в linux?

код в вопросе:

https://gist.github.com/rdp/8443238

выход:

setting it as 2222 
[udp @ 0x1a72ec0] end receive buffer size reported is 4444 

только в Linux, на других ОС, кажется, сообщить об этом в качестве значения я установил его. Спасибо.

+0

Возможный дубликат [Общие сведения о set/getsockopt SO \ _SNDBUF] (https://stackoverflow.com/questions/2031109/understanding-set-getsockopt-so-sndbuf) – rogerdpack

ответ

5

Отрывок из Linux man page для сокета

SO_SNDBUF

Sets или получает максимальный буфер передачи сокета в байтах. Ядро удваивает это значение (чтобы разрешить пространство для служебных служебных данных), когда оно установлено с помощью setsockopt (2), и это удвоенное значение возвращается getsockopt (2). Значение по умолчанию устанавливается в файле /proc/sys/net/core/wmem_default, а максимальное допустимое значение - , установленное файлом/proc/sys/net/core/wmem_max. Минимальное (вдвое) значение этого параметра составляет 2048.

Таким образом, ядро ​​удваивает значение, установленное для его внутреннего назначения.

0

Платформа может регулировать значение, которое вы подаете вверх или вниз. См. Справочную страницу. Вы были ниже минимума платформы.

2222 слишком низко. Это должно быть больше похоже на 32k.

+0

Если я установил его на 32K, он сообщает об этом как 64K. Если он установит его как 64K, он сообщит об этом как 128K ... поэтому я думаю, что это может быть не так, что здесь значение слишком велико ... спасибо! – rogerdpack

+0

Так что это удваивает все, что вы его установили. Платформа может настроить значение, которое вы подаете вверх или вниз. См. Страницу «человек». – EJP

+0

Да, поэтому мой вопрос по-прежнему остается в том, что «почему» Linux удваивает его, когда других ОС нет. В чем причина этого, предпочитая в два раза удвоить запрашиваемую стоимость. – rogerdpack