Здравствуйте, dosik, Вы писали:
D>Что я делаю не так?
В IPv6 нет broadcast, есть только multicast. Чтобы их получать надо подписаться на соответствующую рассылку через setsockopt c IPV6_ADD_MEMBERSHIP.
B да, проверяйте коды ошибки, возвращаемые bind и прочими функциями. И винигрет с reinterpret_cast и c-style cast тоже не есть хорошо.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Здравствуйте, VTT, Вы писали:
VTT>Здравствуйте, dosik, Вы писали:
D>>Что я делаю не так?
VTT>В IPv6 нет broadcast, есть только multicast. Чтобы их получать надо подписаться на соответствующую рассылку через setsockopt c IPV6_ADD_MEMBERSHIP.
Не хотит получать. Делаю вот так:
Может что-то еще упустил?
VTT>B да, проверяйте коды ошибки, возвращаемые bind и прочими функциями. И винигрет с reinterpret_cast и c-style cast тоже не есть хорошо.
Нет ни чего более постоянного — чем временное, еще и выдранное из различных "углов"
Эм, это я малость ввел в заблуждение, там второе поле — индекс интерфейса и 0 — это интерфейс для мультикаста по-умолчанию.
Может у вас надо слушать не интерфейс по умолчанию?
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Здравствуйте, VTT, Вы писали:
VTT>Может у вас надо слушать не интерфейс по умолчанию?
Все верно. При чем MSDN рекомендует использовать GetAdaptersAddresses для получения индекса необходимого адаптера.
Пока не могу понять только одного: для всех без исключения адаптеров FirstUnicastAddress она возвращает "fe80::0", не смотря на то, что система назначила этому адаптеру адрес "fe80::20f1:2438:b4af:1780", и как их идентифицировать по IP пока не знаю.
По названию определил индекс, поставил в .ipv6mr_interface, пакетики побежали. Спасибо!
Здравствуйте, dosik, Вы писали:
D>Пока не могу понять только одного: для всех без исключения адаптеров FirstUnicastAddress она возвращает "fe80::0", не смотря на то, что система назначила этому адаптеру адрес "fe80::20f1:2438:b4af:1780", и как их идентифицировать по IP пока не знаю.
Дело в том, что одному адаптеру может соответствовать несколько адресов, особенно в IPv6. Система просто вернула Вам первый их них (что и означает название FirstUnicastAddress), надо перебирать все, если ищете известный IP. Насколько помню, "fe80::0" — немаршрутизируемый локальный адрес сетевухи, по аналогии с 169.254.0.0/16
D>По названию определил индекс, поставил в .ipv6mr_interface, пакетики побежали. Спасибо!
Кстати, да — может потребоваться SetSockOption(IP_PROTO, IP_MULTICAST_IF) для выбранного адаптера, иначе ОС будет считать, что подписка на мультикаст уже есть другим адаптером, поэтому "нечего пакеты зазря всем раздавать" и будет кормить лишь дефолтного адаптера с наивысшей метрикой (а это может оказаться VPN, хе-хе). http://windowsasusual.blogspot.ru/2013/01/socket-option-multicast-interface.html