所以通常我们做这样的事情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
重置倒计时,当定时器到期时,你可以关闭套接字或采取一些其他行动。