@Pashka23

Зачем устанавливается размер сокета SO_SNDBUF в исходниках traceroute?

Добрый день!

Разбираюсь в исходниках опенсорсного traceroute (https://github.com/openbsd/src/blob/master/usr.sbi... ). Traceroute поочерёдно отправляет udp пакеты с увеличивающимся ttl. В коде (строке 830) устанавливается размер исходящего буфера сокета (с которого отправлятся udp-пакеты) равный размеру отправляемого udp пакета (38 байт). Не могу понять - зачем это вообще нужно? И может ли быть буфер настолько маленьким (каково вообще его минимальное значение)?
  • Вопрос задан
  • 1069 просмотров
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В коде (строке 830) устанавливается размер исходящего буфера сокета (с которого отправлятся udp-пакеты) равный размеру отправляемого udp пакета (38 байт). Не могу понять - зачем это вообще нужно?

Для экономии памяти, очевидно. Возможно было актуально в какой-то момент времени, судя по остальным комментариям в этом файле.

может ли быть буфер настолько маленьким (какого вообще его минимальное значение)?

Как трактовать опции сокетов -- это внутреннее дело ядра. В тегах стоит linux, линуксовый man 7 socket говорит следующее:

SO_SNDBUF
     Sets  or  gets the maximum socket send buffer in bytes.  The kernel doubles this value
     (to allow space for bookkeeping overhead) when it is set using setsockopt(2), and this
     doubled value is returned by getsockopt(2).  The default value is set by the
     /proc/sys/net/core/wmem_default file and the maximum allowed value is set by the
     /proc/sys/net/core/wmem_max file.  The minimum (doubled) value for this option is 2048.
Ответ написан
Комментировать
По всей видимости, это нужно, чтобы следующий пакет мог быть поставлен в очередь только тогда, когда ушел предыдущий, чтобы более точно вычислять задержки/таймауты.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Pashka23 Автор вопроса
Для экономии памяти, очевидно. Возможно было актуально в какой-то момент времени, судя по остальным комментариям в этом файле.
А какой именно памяти? На размер формируемых udp-пакетов это не влияет, а только ограничивает максимально допустимую величину отправляемых пакетов. Или речь идёт об экономии на самих буферах?

The minimum (doubled) value for this option is 2048 Получается код задающий размер буфера сокета равным размеру пакета (38 байт) не имеет смысла т.к. всё равно выставляется минимальное значение 2048.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы