c - 套接字没有加入多播组,但它可以接收数据。

标签 c linux network-programming multicast

当我创建两个 udp 套接字并将它们绑定(bind)到 INADDR_ANY 和相同的端口号时。 但其中一个加入了多播组。 但是它们都可以从同一个多播组接收数据,即使其中一个套接字没有加入多播组。

最佳答案

内核根本不会根据套接字所属的多播组来过滤传入的多播数据包。如果您不将套接字添加到组中,如果同一系统上的其他套接字是成员,它仍可能接收到组的多播。 (我不确定如果多播到达但没有套接字是成员时会发生什么。您可以根据需要进行测试。)

请注意,内核实际上确实跟踪组所有权,甚至是每个套接字。它必须,或者它不能正确地实现 IGMP 协议(protocol)的客户端。例如,内核需要回复来自路由器的各种 IGMP 查询(询问主机加入了哪些组),并且它知道在没有更多套接字加入时发送 Leave Group 消息一个特定的群体。

关于c - 套接字没有加入多播组,但它可以接收数据。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902301/

相关文章:

c - 我如何知道 nl80211 命令需要哪些参数?

network-programming - 有没有人使用 UDP jumbograms 实现了解决方案?

c - 服务器不读取来自客户端的消息

c - 如何避免C中的整数提升?

c - 从函数指针中减去 1

linux - ansible 从另一个任务输出设置事实

python - 如何在 python 脚本中调用 sed 命令?

c - 如何声明包含 C 数组的 C 数组?

c - 为什么要定义函数而不是包含文件

java网络中断管道和接收到的文件损坏