所以我们做了类似socket.read_some(boost::asio::buffer(buffer, buffer_size));
这样的事情,但是如果在没有开始读取的时间超过333秒的情况下如何使它抛出一个例子?
答案 0 :(得分:3)
您应该考虑使用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 wait\n";
timer.async_wait(&handle_timeout);
io_service.run();
您将在后台等待两个异步调用。
每当您收到计时器上的某些数据时,您可以使用cancel和expires_from_now
重置倒计时,当计时器到期时,您可以关闭套接字或采取其他措施。