Как изменить (следующий) код, который получает UDP-сообщения Unicast, чтобы также получать широковещательные сообщения UDP? У меня есть Linux встроенный код с использованием Boost ASIO, который получает сообщения (перефразированный код)
boost::asio::ip::tcp::resolver resolver(io_service_);
boost::asio::ip::tcp::resolver::query query("aaa.bbb.ccc.ddd","12345"));
boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
acceptor.open(endpoint.protocol());
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
acceptor.bind(endpoint);
acceptor.listen();
acceptor.async_accept(socket, bind(handler,...))
..
// udp server
udp_socket = std::make_shared<boost::asio::ip::udp::socket>(io_service, udp_endpoint);
udp_socket->async_receive_from(bind(readhandler,...),...)
Это работает хорошо. Однако я не знаю, какие дополнения / изменения мне нужно сделать, чтобы код также принимал сообщения, отправленные broadcast на этот сервер (сеть) (т. Е. На aaa.bbb.255.255 ").
Я попытался создать вторую точку bc_endpoint (aaa.bbb.255.255), но акцептор не будет привязан к более чем одной конечной точке. В основном я пытаюсь избежать репликации всего кода Unicast, но, возможно, это неизбежно?
Я также попытался создать второй сокет "udp_socket_b c" для широковещательного адреса, но это, кажется, не вызывает никаких входящих сообщений.
boost::asio::ip::udp::resolver udp_resolver(io_service);
boost::asio::ip::udp::resolver::query udp_query("aaa.bbb.255.255", "12345"));
udp_socket_bc = std::make_shared<boost::asio::ip::udp::socket>(io_service, udp_endpoint_bc);
udp_socket_bc->async_receive_from(bind(readhandler_bc, ...), ...)
Я открыл встроенную систему для входящих сообщений c:
iptables -P INPUT ACCEPT
Мой код не реагирует на входящие сообщения, если они были отправлены на широковещательный адрес, но я могу сказать (используя tcpdump), что встроенная система действительно их видит. Как можно изменить код Unicast UDP для получения сообщений широковещания UDP?