1

在我负责处理的现有网络库中,有一个setsockopt我不明白的调用

在这里你可以看到一个 TCP 套接字开始创建:

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

紧接着,在协议级别调用setsockopt期权,期权价值SO_BROADCASTIPPROTO_TCP5

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

根据Beej 的网络指南,这个“什么都不做——什么都没有!!——对 TCP 流套接字!哈哈哈!”

问题:

  • 他们究竟在这里做什么?
  • 这有道理吗?
  • 如果有的话,当然应该是option_value=1,那是5什么?
4

1 回答 1

3

我认为您的 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。

于 2016-07-26T19:42:48.030 回答