Использование одного и того же порта UDP для одноадресного приема, многоадресной отправки

#windows #udp #boost-asio #bind #multicast

Вопрос:

Я разработал простое приложение под Windows 10, которое прослушивает дейтаграммы UDP на заданном порту, а затем направляет дейтаграммы в группу многоадресной рассылки, использующую один и тот же порт (например: привязывается к порту 0.0.0.0:5202 и отправляет в группу многоадресной рассылки 224.0.0.100:5202 ). Это необходимо, поскольку источник данных, первоначально отправляющий многоадресную рассылку, может быть подключен к сети, которая не поддерживает многоадресную рассылку. Приложение адаптирует одноадресную передачу к многоадресной. Чтобы избежать изменений в получателях многоадресной рассылки и свести к минимуму изменения в отправителе, мы решили оставить порт неизменным (как в источнике, так и в конечном пункте назначения).

Проблема в том, что как только я запускаю приложение адаптера, получатели многоадресной рассылки, работающие на одном хосте, не могут подключиться к группе многоадресной рассылки. Я использую библиотеку boost asio, чтобы приложение работало как под Windows 10, так и под Linux.

Я установил опцию повторного использования сокета адреса, но клиенты в любом случае не привязываются. Есть идеи ? или эта штука просто не может работать под Windows 10 ?

Комментарии:

1. Ваше приложение и приложения, получающие многоадресную рассылку, должны использовать SO_REUSEPORT.

Ответ №1:

Может ли приложение-получатель многоадресной рассылки прослушивать интерфейс обратной связи 127.0.0.1 ? Если это так, ваш адаптер может прослушивать физический интерфейс (вместо 0.0.0.0), получать данные UDP, а затем повторно отправлять 224.0.0.100:5202 через интерфейс 127.0.0.1.