Как сделать таймаут при чтении из 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) (у меня пока нет возможности использовать что-то другое) начал падать, когда я пытаюсь дебажить. Если без дебагера запускать, то решение работает не всегда.