Почему метод datagramSocketImpl joinGroup принимает NetworkInterface, если сокет уже был привязан к нему? - PullRequest
2 голосов
/ 27 февраля 2012

Просто любопытно. Это избыточно? Разве вы уже не связаны с сетью, которую хотите использовать? Возможно, это для случая, когда вы привязаны к 0.0.0.0 и хотите прослушивать многоадресные пакеты только с интерфейса X?

1 Ответ

2 голосов
/ 28 февраля 2012
  1. Если вы связаны с INADDR_ANY, что является нормальным случаем, IGMP-сообщение объединенной группы отправляется через какой-либо интерфейс NIC, указанный в таблицах маршрутизации, дает кратчайший маршрут к многоадресному адресу.В многосетевых хостах он может понадобиться для выхода через все сетевые адаптеры, поэтому вы можете переключаться между ними по очереди.

  2. Если вы привязаны к определенному сетевому адаптеру, это нене имеет смысла указывать сетевой интерфейс при присоединении.

  3. Если вы привязаны к самому адресу многоадресной рассылки, так что этот сокет может принимать только многоадресные рассылки, а не одноадресную UDP, вы можетенеобходимо выполнить цикл, как в (1), если вы хотите присоединиться через все интерфейсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...