У меня есть две программы (MS VC ++), которые используют многоадресную передачу — получатель и отправитель. Я тестирую его между настольным ПК (Windows 7) и нетбуком (Windows XP) через WiFi. Настольный ПК имеет WiFi ключ, который работает в режиме AP. Если я укажу INADDR_ANY в адресе интерфейса в программе-отправителе, у меня возникнет проблема: многоадресная рассылка не достигает нетбука с настольного компьютера. Если я укажу реальный адрес этого интерфейса WiFi вместо INADDR_ANY — он работает нормально.
Итак, я хочу, чтобы моя программа-отправитель могла работать на всех интерфейсах. Как я могу это сделать? Я должен инициализировать отдельный сокет для каждого интерфейса? Или, может быть, это более элегантная возможность?
Как говорили предыдущие люди, вы должны явно выбрать выходной интерфейс. Если вы хотите выполнять многоадресную передачу на разные интерфейсы одновременно, вам понадобится несколько сокетов. В boost :: asio соответствующий вызов:
boost::asio::ip::udp::socket* _write;
...
_write->set_option( ip::multicast::outbound_interface( ifAddr.to_v4()));
Других решений пока нет …