2012-02-29 56 views
2

我看了一下asio documentation中发现的异步超时示例,但我想知道是否可以放置异步读取(最多N个字节)的S秒,但是如果发生超时,它将返回读取的字节缓冲区,直到发生超时而不是错误代码。套接字 - 尽可能多地读取超时

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

+0

这几乎从来都不是一件明智的事情。你外在的问题是什么?几乎肯定有更好的解决方案。 – 2012-02-29 05:48:38

+0

对于berkeley套接字,如果缓冲区中没有数据,则会发生超时,因此您会一直读取,直到收到N个字节或所需的时间过去。每次部分读取后,您必须更新超时值和请求字节数。没有举一个例子,因为不知道你是否对使用阻塞套接字的非asio解决方案感兴趣。 – tomasz 2012-03-03 01:03:08

回答

-1

是的,你可以做到这一点:

  1. 搭建asio请求读取高达您还没有阅读然而,许多字节。

  2. 设置一个asio定时器在无论多少时间都会触发,直到时间耗尽为止。

  3. 如果您得到的读取命中满足您需要的字节数,请取消定时器。

  4. 如果您得到部分读取,请设置另一个部分读取和另一个定时器。

但是,这几乎从来都不是一个明智的做法。无论你的外在问题是你认为解决的问题,几乎肯定会有更好的解决方案。

+4

请解释downvote。如果我不正确,我想纠正自己。如果你不正确,我想纠正你。如果有更好的方法,我想知道它。如果我不清楚,我想澄清一下。 – 2012-03-01 01:43:30

+0

+1对此几乎是不明智的事情 – 2012-03-04 16:28:16