【问题标题】:bind with INADDR_ANY与 INADDR_ANY 绑定
【发布时间】:2011-11-28 06:44:13
【问题描述】:

如果我将套接字绑定到 INADDR_ANY,我知道它将接受服务器上配置的任何 IP 上的传入连接。假设我在进行 bind() 调用时配置了 1 个 IP,然后配置了一个新 IP。 bind() 是否也会接受向新配置的 IP 发起的连接,还是仅适用于调用 bind() 时存在的 IP?

【问题讨论】:

  • 您可以检查netstat -l - 它应该为端口 n 上的侦听套接字打印 0.0.0.0:n(或 :::n 用于 ipv6)。如果您看到每个 IP 有多个侦听套接字,则可能无法正常工作。

标签: linux sockets bind


【解决方案1】:

在 Linux 上,当您绑定到 INADDR_ANY 时,套接字将保持绑定到 0.0.0.0 并接受与任何本地 IP 地址的连接,无论该地址如何变化。只有当 TCP 连接建立时,单个连接才会绑定到接收它的 IP 地址。任何地址仍可能收到其他连接。

【讨论】:

    【解决方案2】:

    是的,它将接受新创建或新配置的接口上的连接。

    您可以自己尝试,通过创建一个虚拟接口:

    /sbin/ifconfig dummy0 172.17.42.99 netmask 255.255.255.255
    

    什么的;然后尝试连接到该 IP。

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2019-05-17
      • 2014-03-05
      • 1970-01-01
      • 2017-10-17
      • 2012-04-16
      • 2021-04-06
      • 2023-03-28
      • 2018-03-19
      相关资源
      最近更新 更多