gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:20:48 28 4
gpt4 key购买 nike

在 Python 中,当我们想要编写一个脚本来监听多播流量时,我们将套接字的 IP_ADD_MEMBERSHIP 选项设置为由多播组地址和本地接口(interface)地址组成的值它将监听该组的流量。

Internet 上的许多示例将 INADDR_ANY 通配符地址作为本地接口(interface)传递给 IP_ADD_MEMBERSHIP,其中一些声明这将使在所有 接口(interface)上监听多播数据包的套接字。然而,Linux ip(7) 手册页指出,当使用 INADDR_ANY

"an appropriate interface is chosen by the system"

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

所以要么网上的一些答案是错误的,要么我在这里遗漏了什么。我认为在 IP_ADD_MEMBERSHIP 中用作参数时 INADDR_ANY 和在 bind() 中用作参数时 INADDR_ANY 存在混淆 (由空字符串表示)但我不太确定。有人可以澄清在 IP_ADD_MEMBERSHIP 中使用时 INADDR_ANY0.0.0.0 发生了什么(即它选择默认接口(interface)或所有接口(interface))和如果它与 bind 一起使用时表现不同?

最佳答案

INADDR_ANY 被指定为 bind 调用中的地址时,这会导致套接字在给定端口上监听任何 网络接口(interface).

以这种方式调用bind 后,您将在netstat 命令的输出中看到如下条目:

udp        0      0 0.0.0.0:46162           0.0.0.0:*  

这是一个绑定(bind)到端口 46162 的 INADDR_ANY 的 UDP 套接字。

在设置IP_ADD_MEMBERSHIP选项时用作接口(interface)地址时,INADDR_ANY表示操作系统将选择一个接口(interface)加入给定的多播组,即“默认"网络接口(interface)。

意味着它将在所有接口(interface)上加入该组。为此,您需要遍历所有网络接口(interface)并在每个接口(interface)上设置 IP_ADD_MEMBERSHIP 选项。

我使用过 Linux、Solaris、FreeBSD 和 Windows,当使用 INADDR_ANY 时,它们都没有在所有接口(interface)上加入多播组。

关于python - 使用INADDR_ANY的目的和结果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46066244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com