Я использую многоадресный UDP между хостами, которые имеют несколько сетевых интерфейсов. Я использую boost:: asio, и я смущен двумя операциями, которые получатели должны сделать: bind, а затем join-group.
Зачем вам нужно указывать локальный адрес интерфейса во время связывания, когда вы делаете это с каждой группой многоадресной рассылки, в которую вы вступаете?
Вопрос с сестрой касается порта многоадресной передачи: поскольку во время отправки вы отправляете на адрес и порт многоадресной рассылки, почему во время подписки на группу многоадресной рассылки указывается только адрес, а не порт - порт, указанный в запутанный вызов для привязки.
Примечание. "join-group" - это оболочка поверх setsockopt(IP_ADD_MEMBERSHIP)
, которая, как задокументировано, может быть вызвана несколько раз в одном сокете для подписки на разные группы (по разным сетям?). Поэтому было бы разумно отказаться от вызова привязки и указать порт каждый раз, когда я подписываюсь на группу.
Из того, что я вижу, всегда привязывается к "0.0.0.0" и указывает адрес интерфейса при вступлении в группу, работает очень хорошо. Confused.