提升::asio插座 - 如何在"timeout"中制作read_some 'throw'?

Boost::asio socket - how to make read_some 'throw' in "timeout"?

本文关键字:read some throw 插座 asio 提升 timeout      更新时间:2023-10-16

所以通常我们做这样的事情socket.read_some(boost::asio::buffer(buffer, buffer_size));,但如何使它抛出一个异常的情况下,读还没有开始一段时间超过说333秒?

你应该考虑使用async_read_some而不是read_some,因为它允许你在读取的同时启动一个新的背景定时器。然后,为每个新的套接字创建一个新的计时器:

boost::asio::io_service io_service;
time_t_timer timer(io_service);
timer.expires_from_now(333);
std::cout << "Starting asynchronous waitn";
timer.async_wait(&handle_timeout);
io_service.run();

您将有两个异步调用在后台等待。

当你收到定时器上的一些数据时,你可以使用cancel和expires_from_now重置倒计时,当定时器到期时,你可以关闭套接字或采取一些其他行动。