当我创建两个 udp 套接字并将它们绑定(bind)到 INADDR_ANY 和相同的端口号时。 但其中一个加入了多播组。 但是它们都可以从同一个多播组接收数据,即使其中一个套接字没有加入多播组。
最佳答案
内核根本不会根据套接字所属的多播组来过滤传入的多播数据包。如果您不将套接字添加到组中,如果同一系统上的其他套接字是成员,它仍可能接收到组的多播。 (我不确定如果多播到达但没有套接字是成员时会发生什么。您可以根据需要进行测试。)
请注意,内核实际上确实跟踪组所有权,甚至是每个套接字。它必须,或者它不能正确地实现 IGMP 协议(protocol)的客户端。例如,内核需要回复来自路由器的各种 IGMP 查询(询问主机加入了哪些组),并且它知道在没有更多套接字加入时发送 Leave Group 消息一个特定的群体。
关于c - 套接字没有加入多播组,但它可以接收数据。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902301/