【问题标题】:Is the socket option local in Linux?Linux 中的套接字选项是本地的吗?
【发布时间】:2016-06-23 02:11:36
【问题描述】:

如果服务器端的系统调用setsockopt()设置了套接字选项(例如SO_BROADCAST,该套接字是TCP套接字),是否有可能在客户端以某种方式检索它(例如getsockopt() )?换句话说,套接字选项只是一个本地设置吗? (与“local”相反,如果为一个数据包设置了一个TCP选项(例如Window Scale),它可以在另一端自然接收。)

提前致谢!

【问题讨论】:

  • SO_BROADCAST 不是 TCP 选项。
  • @EJP 我不是说它是 TCP 选项.....
  • 这就是你的标题所说的。你总是可以解决它。
  • @EJP 抱歉含糊不清...我的意思是套接字选项,其中套接字是 TCP 套接字。我已经删除了标题中的修饰符 TCP。

标签: linux sockets tcp linux-kernel


【解决方案1】:

这个问题的答案是否定的。您的本地套接字选项在另一端是不可发现的,除非它们直接更改协议行为。 SO_BROADCAST 不会改变协议行为,并且是不可发现的。另一方面,改变协议行为的 TCP 选项(例如 TCP_NODELAY)是可以发现的,至少在理论上是这样。

【讨论】:

  • TCP_NODELAY 控制本地内核一次发送待处理数据的频率和数据量。它不能在另一端直接发现,因为它不会改变协议本身。接收方必须使用启发式方法来分析接收数据的频率,并猜测TCP_NODELAY 是否被使用。
  • @RemyLebeau,这正是我所说的“理论上”。通过监控模式,某人可以做出有根据的猜测。
猜你喜欢
  • 2015-12-16
  • 2010-11-15
  • 2017-10-27
  • 2014-09-07
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多