Как сделать таймаут при чтении из udp::socket в boost::asio?

Я создаю однопоточное приложение, которое обменивается данными по UDP с другим. Когда второе отключается, то socket::receive_from блокируется и я не знаю, как решить эту проблему не переводя программу целиком на многопоточность или асинхронные взаимодействия.

Я думал, что следующий код может быть решением:

    std::chrono::milliseconds timeout{4};
    boost::system::error_code err;
    data_t buffer(kPackageMaxSize);
    std::size_t size = 0;

    const auto status = std::async(std::launch::async,
        [&]{
            size = socket_.receive_from(boost::asio::buffer(buffer), dst_, 0, err);
        }
    ).wait_for(timeout);

    switch (status)
    {
        case std::future_status::timeout: /*...*/ break;
    }

Но я встретился с новой проблемой: Qt Creator (GDB 11.1) (у меня пока нет возможности использовать что-то другое) начал падать, когда я пытаюсь дебажить. Если без дебагера запускать, то решение работает не всегда.


Ответы (0 шт):