+-

在 Python中,当我们想要创建一个侦听多播流量的脚本时,我们设置套接字的IP_ADD_MEMBERSHIP选项,其值包含多播组地址和本地接口的地址,它将在该接口上侦听组的流量.
Internet上的许多示例都将INADDR_ANY通配符地址作为本地接口传递给IP_ADD_MEMBERSHIP,其中一些示例表明这将使套接字在所有接口上侦听多播数据包.但是,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_ANY或0.0.0.0的情况(即它选择默认接口或所有接口),并且当它与bind一起使用时表现不同吗?
最佳答案
当INADDR_ANY作为绑定调用中的地址给出时,这会使套接字在给定端口上侦听任何网络接口.
以这种方式调用bind之后,你会在netstat命令的输出中看到这样的条目:
udp 0 0 0.0.0.0:46162 0.0.0.0:*这是一个UDP套接字,它与端口46162绑定到INADDR_ANY.
当在设置IP_ADD_MEMBERSHIP选项时用作接口地址时,INADDR_ANY指示OS将选择接口以加入给定的多播组,即“默认”网络接口.
这并不意味着它将在所有接口上加入该组.为此,您需要遍历所有网络接口并在每个接口上设置IP_ADD_MEMBERSHIP选项.
我使用过Linux,Solaris,FreeBSD和Windows,在使用INADDR_ANY时,它们都没有在所有接口上加入组播组.
点击查看更多相关文章
转载注明原文:python – 使用INADDR_ANY的目的和结果是什么? - 乐贴网