【问题标题】:Why not using SO_REUSEADDR on Unix TCP/IP servers?为什么不在 Unix TCP/IP 服务器上使用 SO_REUSEADDR?
【发布时间】:2011-10-21 01:45:25
【问题描述】:

我没有看到任何重要的 TCP/IP 服务器不使用 SO_REUSEADDR :

有没有在 TCP/IP 服务器上不使用 SO_REUSEADDR 的用例?

我的意思是,让操作系统总是使用 SO_REUSEADDR 会破坏任何不使用它的服务器吗?

你知道有一个 TCP/IP 服务器不使用 SO_REUSEADDR 是有原因的吗?

(当然你可能不想在 MSWindows 上使用它,因为它允许在同一个端口上运行两台服务器)

【问题讨论】:

  • 如果你想快速停止并重启你需要的服务器,那么...
  • 为什么 SO_REUSEADDR 不是监听套接字的默认值?可能应该有 SO_NOTREUSEADDR 代替吗?
  • @Vi。问题是没有任何使用 SO_NOTREUSEADDR 的用例。你认识一个吗?

标签: sockets unix network-programming


【解决方案1】:

当然,默认情况下不使用 SO_REUSEADDR 是有充分理由的。

它将允许任何进程绑定到与敏感 Internet 服务相同的侦听套接字并代表它接受连接!这允许无限制的窃听和中间人。

【讨论】:

  • 您不能让多个服务监听给定的 IP:port 组合(如果 IP 为 0.0.0.0,则将该端口设为单个服务)。你不能这样窃听。不过,您可以尝试使用 ARP 来获取不应该发送给您的数据包的副本。
【解决方案2】:

嗯,UNP (Stevens 2004) 说:

SO_REUSEADDR 允许监听服务器启动并绑定它的 众所周知的端口,即使以前建立的连接存在 使用这个端口作为他们的本地端口。

所有 TCP 服务器都应指定此套接字选项以允许服务器 重新启动

【讨论】:

  • 这是否意味着 OP 错误,所有服务器都在使用该选项?
猜你喜欢
  • 1970-01-01
  • 2020-04-15
  • 2011-01-19
  • 2021-11-05
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
相关资源
最近更新 更多