Почему многоадресные сообщения с тем же IP-адресом источника игнорируются - PullRequest
1 голос
/ 03 февраля 2012

Я реализовал процесс обнаружения сети, который использует многоадресные сообщения. Позволяет обнаруживать конкретные устройства с любым 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

Может возникнуть совпадение: клиент A, который отправляет многоадресное сообщение, и клиент B одновременно прослушивают один и тот же IP-адрес. В этом случае адрес источника пакета UDP совпадает с IP-адресом клиента назначения. Таким образом, приложение на клиенте B не получает многоадресных сообщений.

Полагаю, что многоадресное сообщение с такими же сообщениями блокируется и сбрасывается в ip-стек. Есть ли способ (настройки сокета) получить его в любом случае.

1 Ответ

6 голосов
/ 03 февраля 2012

Да, вы можете сделать так, чтобы хост считывал свои собственные многоадресные пакеты (которые часто являются просто фильтром по IP-адресу источника), это контролируется опцией сокета IP_MULTICAST_LOOP.

int loop = 1;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
...