代码之家  ›  专栏  ›  技术社区  ›  AndroidX

使用INADDR_ANY的目的和结果是什么?

  •  6
  • AndroidX  · 技术社区  · 7 年前

    在Python中,当我们想要制作一个侦听多播流量的脚本时,我们设置 IP_ADD_MEMBERSHIP 套接字选项,其值由多播组地址和本地接口的地址组成,该接口将侦听组的通信量。

    这个 INADDR_ANY 作为本地接口的通配符地址,以及 一些 多播数据包的接口。然而,Linux ip(7)手册页指出

    freebsd手册页说它将选择“默认界面”。

    所以,要么网上的一些答案是错误的,要么我在这里遗漏了一些东西。我认为这与 在中用作参数时 bind() (由空字符串表示)但我不太确定。有人能澄清一下发生了什么吗 0.0.0.0 在中使用时 (即,它选择默认接口或所有接口)以及它在与一起使用时的行为是否不同 bind

    1 回复  |  直到 6 年前
        1
  •  10
  •   dbush    7 年前

    INADDR_ANY 以a中的地址给出 bind 调用时,这会导致套接字在给定端口上侦听 网络接口。

    绑定 这样,您将在 netstat

    udp        0      0 0.0.0.0:46162           0.0.0.0:*  
    

    这是绑定到的UDP套接字 INADDR_任何

    当设置 IP_ADD_MEMBERSHIP 选项 指示操作系统将选择一个接口加入给定的多播组,即“默认”网络接口。

    确实如此 意味着它将在所有接口上加入组。为此,您需要在所有网络接口上创建并设置 IP\u ADD\u成员身份 每个选项。

    我曾经使用过Linux、Solaris、FreeBSD和Windows,在使用时,它们都没有在所有界面上加入多播组