Как изменить код получения Boost UDP Unicast, чтобы он также принимал широковещательные дейтаграммы? - PullRequest
0 голосов
/ 28 февраля 2020

Как изменить (следующий) код, который получает 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...