Я изучал различную документацию (.NET WinSock, c ++ boost :: asio) о многоадресной рассылке. У меня есть одна проблема: я не вижу, как вы узнали бы, есть ли хотя бы 1 подписчик в группу. Причина, по которой мне это нужно, заключается в том, что нет смысла создавать данные, если их никто не слушает. От следующего перехода отправлено сообщение о текущем состоянии дерева? Есть ли какое-то событие, инициированное, когда появляется первый подписчик или когда последний уходит?
Обратитесь к этой статье на «Как работает многоадресная рассылка.»
Короче говоря, вашему приложению не нужно отслеживать многоадресные подписки; маршрутизатор сделает это за вас. Если у вас есть данные для многоадресной передачи, а затем создайте их — маршрутизатор позаботится о том, будут ли эти данные отправлены подписчикам.
Нет событий, которые генерируются маршрутизатором, чтобы уведомить вас о подписках. Если вам нужны уведомления, вам придется встроить эту функциональность в собственную реализацию собственного протокола и потребовать, чтобы ваши клиенты явно уведомили хост.
Вы можете знать, что если вы можете выдать сообщение IGMP QUERY или, слушая сообщения IGMP JOIN / LEAVE: вы получите только один из них, если только вы не подключены к нескольким маршрутизаторам. Пока последнее сообщение IGMP было JOIN для вашей группы, а не LEAVE, существует по крайней мере один подписчик.