【发布时间】: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