Здравствуйте, prrt, Вы писали:
P>Получаю так:
P>[ccode]
P>boost::asio::ip::address listen_address = boost::asio::ip::address::from_string("192.168.2.2");
P>...
P>boost::asio::ip::udp::endpoint listen_endpoint(listen_address, 30001);
P>...
P>socket_.bind(listen_endpoint);
Первое: почему свой локальный айпишник для бинда, ведь мультикаст адресуется не на "192.168.2.2", а на "239.255.0.1"? Попробуйте INADDR_ANY для 100% гарантии.
Второе: по дефолту мультикаст прилетает только на один интерфейс — и не факт что система выберет именно 192.168.2.2. Когда делаем join_group — нет ли там у asio перегрузки для двух аргументов: адрес группы и адрес своего интерфейса? Потому как у олдскульного API там два параметра:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms738695(v=vs.85).aspx
typedef struct ip_mreq {
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
} IP_MREQ, *PIP_MREQ;
Members
imr_multiaddr
The address of the IPv4 multicast group.
imr_interface
The local IPv4 address of the interface or the interface index on which the multicast group should be joined or dropped. This value is in network byte order. If this member specifies an IPv4 address of 0.0.0.0, the default IPv4 multicast interface is used.