为什么忽略具有相同源IP地址的组播消息

Mau*_*aus 1 linux ip network-programming multicast

我实现了一个利用多播消息的网络发现过程.它允许发现具有连接到同一段的任何ip地址的特定设备.

客户端A发送多播消息,要求其他客户端.其他客户端使用多播消息"我在这里......"进行响应.基本上这很好用.

但有一个案例让我烦恼.

 Client A       Client B
192.168.2.5   192.168.2.5  
    |             |
     \__________ / 
         >>>
  UDP Multicast Message: 
  Source: 192.168.2.5 | Destination: 224.0.0.150
Run Code Online (Sandbox Code Playgroud)

可能会出现一致,即发送多播消息的客户端A和客户端B都监听相同的IP地址.在这种情况下,UDP数据包的源地址与目标客户端的IP地址相同.因此,客户端B上的应用程序不接收任何多播消息.

我想具有相同消息的多播消息被阻塞并丢弃在ip-stack中.有没有办法(套接字设置)接收它.

nos*_*nos 6

是的,您可以让主机读取自己的多播数据包(通常只是源IP地址上的过滤器),这由IP_MULTICAST_LOOP套接字选项控制.

int loop = 1;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
Run Code Online (Sandbox Code Playgroud)

  • [IP_MULTICAST_LOOP 已启用](http://www.tldp.org/HOWTO/Multicast-HOWTO-6.html) 默认情况下,因此您通常不需要使用此 setsockopt,除非您在程序的某一部分禁用循环并且然后想重新启用它。 (2认同)