【问题标题】:What's real about SO_REUSEADDRSO_REUSEADDR 的真实情况
【发布时间】:2016-06-27 10:56:28
【问题描述】:

在关于 SO_REUSEADDR(man 7 socket)的手册页中:

当侦听套接字使用特定端口绑定到 INADDR_ANY 时,就不可能为任何本地地址绑定到该端口。参数是一个整数布尔标志。

但在 Unix 网络编程中,我发现:

SO_REUSEADDR 允许在与绑定到通配符地址的现有服务器相​​同的端口上启动新服务器,只要每个实例绑定不同的本地 IP 地址。这对于使用 IP 别名技术(第 A.4 节)托管多个 HTTP 服务器的站点来说很常见。假设本地主机的主 IP 地址是 198.69.10.2,但它有两个别名:198.69.10.128 和 198.69.10.129。启动了三个 HTTP 服务器。第一个 HTTP 服务器将使用通配符作为本地 IP 地址和本地端口 80(HTTP 的众所周知的端口)调用 bind。第二个服务器会调用本地 IP 地址为 198.69.10.128 和本地端口为 80 的 bind。但是,除非在调用之前设置了 SO_REUSEADDR,否则第二个调用 bind 会失败。第三台服务器将绑定 198.69.10.129 和端口 80。同样,此最终调用需要 SO_REUSEADDR 才能成功。

他们不是矛盾的吗?

【问题讨论】:

    标签: tcp


    【解决方案1】:

    它们没有冲突。第二个引号提供了一种绕过第一段指定的默认行为的方法。

    【讨论】:

    • 谢谢!在tcp中,这样说是否正确:本地ip和INADDR_ANY(相同端口)被认为是冲突地址,无论是否设置SO_REUSEADDR,绑定都会失败?可以给我讨论链接吗?或许可以看到更详细的信息。
    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多