Что означает привязка многоадресного (UDP) сокета?

Я использую многоадресную рассылку UDP между хостами, имеющими несколько сетевых интерфейсов. Я использую boost:: asio, и меня смущают две операции, которые должны выполнять получатели: привязать, а затем присоединиться к группе.

Зачем нужно указывать локальный адрес интерфейса во время привязки, когда вы делаете это для каждой многоадресной группы, к которой присоединяетесь?

Родственный вопрос касается многоадресного порта: поскольку при отправке вы отправляете на многоадресный адрес и порт, почему при подписке на многоадресную группу вы указываете только адрес, а не порт - порт указывается в запутанный вызов для привязки.

Примечание: «join-group» является оболочкой над setsockopt(IP_ADD_MEMBERSHIP), которая, как задокументировано, может вызываться несколько раз в одном и том же сокете для подписки на разные группы (в разных сетях?) . Поэтому было бы разумно отказаться от вызова привязки и указывать порт каждый раз, когда я подписываюсь на группу.

Из того, что я вижу, всегда привязка к "0.0.0.0" и указание адреса интерфейса при присоединении к группе работает очень хорошо. Смущенный.

65
задан Yves M. 5 December 2014 в 12:47
поделиться