套接字 - 使用超时尽可能多地读取

时间:2012-02-29 05:45:37

标签: c++ sockets io boost-asio

我已经查看了asio documentation中的异步超时示例,但我想知道是否可以使用超时S秒进行异步读取(最多N个字节),但是如果发生超时,它将返回一个读取的字节缓冲区,直到发生超时而不是错误代码。

例如,如果我要执行1000字节的读取(recv),超时为10秒,并且在10秒之前只有300字节到达,我希望返回300字节 - 这可能是使用ASIO?甚至是伯克利插座接口?

1 个答案:

答案 0 :(得分:-1)

是的,你可以这样做:

  1. 设置asio请求以读取最多但是您还没有读取多少字节。

  2. 设置asio计时器,以便在时间用完之前启动。

  3. 如果您的读取命中符合您想要的字节数,请取消定时器。

  4. 如果您获得部分阅读,请设置另一个部分阅读和另一个计时器。

  5. 但这几乎不是一件明智的事情。无论您认为这解决了什么外部问题,几乎可以肯定有更好的解决方案。