Привязка двух многоадресных сокетов к одному порту - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь объединить две разные группы многоадресной рассылки из двух разных процессов на одной машине:

  • Процесс A присоединяется к порту 224.1.1.100 10000
  • Процесс B пытается присоединиться к порту 224.1.1.101 10000

Процесс А получает данные из 224.1.1.100:10000 просто отлично.

Проблема в том, что процесс B не получает трафик от 224.1.1.101:10000 - вместо этого он получает трафик от соединения, которое сделал процесс A (224.1.1.100:10000)

Базовый код двух процессов использует Boost Asio. Каждый процесс открывает сокет для одного и того же порта 10000. Однако каждый из них отправляет соединение отдельной группе многоадресной рассылки (процесс A - 224.1.1.100, процесс B - 224.1.1.101).

Ключевая проблема - два процесса, открывающие сокет для одного и того же порта. Как я могу выполнить эту работу в свете необходимости прослушивания одного и того же порта в двух группах многоадресной рассылки (224.1.1.100 и 224.1.1.101)?

Обработать пример кода:

<code>
listenInterface( boost::asio::ip::address::from_string( "0.0.0.0" ) ),
localEndpoint = boost::asio::ip::udp::endpoint( listenInterface, 10000 );
socket.bind( localEndpoint );
socket.set_option( boost::asio::ip::multicast::join_group( boost::asio::ip::address::from_string( "224.1.1.100" ) ) );

Пример кода процесса B:

<code>
listenInterface( boost::asio::ip::address::from_string( "0.0.0.0" ) ),
localEndpoint = boost::asio::ip::udp::endpoint( listenInterface, 10000 );
socket.bind( localEndpoint );
socket.set_option( boost::asio::ip::multicast::join_group( boost::asio::ip::address::from_string( "224.1.1.101" ) ) );

1 Ответ

1 голос
/ 05 декабря 2011

Я понял это.Коренная причина не заключалась в уникальном интерфейсе listenInterface между двумя процессами.Переключив listenInterface, который используется в привязке, к локальной конечной точке, я заставил его работать.

...