Невозможно привязать к многоадресному адресу (Windows)
Я пытаюсь написать приложение, которое прослушивает несколько групп многоадресной рассылки с помощью сокетов Windows.
Проблема, с которой я работаю, заключается в том, что при попытке связать сокет, если я пытаюсь связать с адресом и адресом группы многоадресной рассылки, происходит сбой с помощью WSAEADDRNOTAVAIL. Если я вместо этого связываюсь с INADDR_ANY и портом, то я все равно могу получать другой несвязанный трафик, предназначенный для того же порта.
Когда я реализовал то же самое в Linux, у меня не было проблем с привязкой к адресу многоадресной рассылки (на самом деле, я видел, что он рекомендовал несколько мест, чтобы избежать получения несвязанного трафика для порта).
Это только не доступно с сокетами Windows? Я предполагаю, что мог бы сам фильтровать трафик, используя WSARecvFrom и заглядывая в заголовки, но я бы предпочел простое решение, если таковое существует.
Кроме того, это работает на Windows Server 2008.
1 ответ
В то время как документ для bind() не говорит, что это не поддерживается, он говорит в комментариях:
Для многоадресных операций предпочтительным методом является вызов функции связывания, чтобы связать сокет с локальным IP-адресом, а затем присоединиться к многоадресной группе....
Может быть, эта схема даст лучшие результаты?