Имитация многоадресной передачи на петлевом интерфейсе - PullRequest
1 голос
/ 31 мая 2011

Я пишу сетевое приложение на ruby, которое должно использовать многоадресную передачу UDP.

Моя проблема в том, что я хочу запустить несколько экземпляров для тестирования на локальном хосте, но многоадресная рассылка работает, только если я привязываю сокет к реальному сетевому интерфейсу.

Есть ли способ включить многоадресную передачу для интерфейса обратной связи, чтобы все 127.0.0.x получали сообщение, которое я отправляю? В настоящее время я включаю многоадресную рассылку с помощью:

ip = IPAddr.new('234.56.78.9').hton + IPAddr.new('0.0.0.0').hton
socket.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP,ip)
#socket.bind '127.0.0.1',1234 ##does not receive multicast :(
socket.bind '0.0.0.0',1234

Кроме того, я заметил, что если я, например, привязать сокет к 127.0.0.4 и отправить сообщение, в пакете IP-адрес источника в любом случае равен 127.0.0.1 ... есть ли способ установить IP-адрес источника, чтобы он показывал тот же IP, к которому я привязал сокет?

1 Ответ

2 голосов
/ 17 июня 2011

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

...