setockopt SO_BROADCAST на сокете TCP

В существующей сетевой библиотеке, над которой мне поручили работать, есть вызов setsockopt, который я не понимаю.

Здесь вы можете увидеть начало создания сокета TCP:

[socket] fd(11) domain(2:AF_INET) type(1:SOCK_STREAM) protocol(0:default)

Сразу же после этого выполняется вызов setsockopt для опции SO_BROADCAST на уровне протокола IPPROTO_TCP со значением опции 5.

[setsockopt] fd(11) level(6:IPPROTO_TCP) option(6:SO_BROADCAST) ret(0) option:
    0    0500 0000                                  ....

Согласно руководству Beej по работе в сети, этот "ничего не делает —НИЧЕГО!!—в сокеты потока TCP! Ха-ха-ха!"

Вопросы:

  • Что именно они здесь делают?
  • Есть ли в этом смысл?
  • Во всяком случае, это должно быть option_value=1, так о чем же 5?

person Steve Lorimer    schedule 26.07.2016    source источник


Ответы (1)


Я думаю, что ваш декодер setsockopt неверен. Вы уверены, что это не один из них?

#define TCP_NODELAY              1  /* Don't delay send to coalesce packets  */
#define TCP_MAXSEG               2  /* Set maximum segment size  */
#define TCP_CORK                 3  /* Control sending of partial frames  */
#define TCP_KEEPIDLE             4  /* Start keeplives after this period */
#define TCP_KEEPINTVL            5  /* Interval between keepalives */
#define TCP_KEEPCNT              6  /* Number of keepalives before death */

Это не полный список. Смотрите /usr/include/netinet/tcp.h для всего.

person Zan Lynx    schedule 26.07.2016
comment
Ах да - я полагаю, это должно быть level=6 правильно? Спасибо! - person Steve Lorimer; 26.07.2016