Boost :: asio socket - 如何在“超时”中使read_some'throw'?

时间:2011-11-03 22:31:25

标签: c++ sockets boost timeout boost-asio

所以我们做了类似socket.read_some(boost::asio::buffer(buffer, buffer_size));这样的事情,但是如果在没有开始读取的时间超过333秒的情况下如何使它抛出一个例子?

1 个答案:

答案 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();

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

每当您收到计时器上的某些数据时,您可以使用cancelexpires_from_now重置倒计时,当计时器到期时,您可以关闭套接字或采取其他措施。