#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.