我看了一下asio documentation中发现的异步超时示例,但我想知道是否可以放置异步读取(最多N个字节)的S秒,但是如果发生超时,它将返回读取的字节缓冲区,直到发生超时而不是错误代码。套接字 - 尽可能多地读取超时
例如,如果我要执行1000字节的读取(recv),超时时间为10秒,并且在10秒钟后才到达300字节,我希望返回300字节 - 这是可能的使用asio?甚至是伯克利插座接口?
我看了一下asio documentation中发现的异步超时示例,但我想知道是否可以放置异步读取(最多N个字节)的S秒,但是如果发生超时,它将返回读取的字节缓冲区,直到发生超时而不是错误代码。套接字 - 尽可能多地读取超时
例如,如果我要执行1000字节的读取(recv),超时时间为10秒,并且在10秒钟后才到达300字节,我希望返回300字节 - 这是可能的使用asio?甚至是伯克利插座接口?
是的,你可以做到这一点:
搭建asio
请求读取高达您还没有阅读然而,许多字节。
设置一个asio
定时器在无论多少时间都会触发,直到时间耗尽为止。
如果您得到的读取命中满足您需要的字节数,请取消定时器。
如果您得到部分读取,请设置另一个部分读取和另一个定时器。
但是,这几乎从来都不是一个明智的做法。无论你的外在问题是你认为解决的问题,几乎肯定会有更好的解决方案。
请解释downvote。如果我不正确,我想纠正自己。如果你不正确,我想纠正你。如果有更好的方法,我想知道它。如果我不清楚,我想澄清一下。 – 2012-03-01 01:43:30
+1对此几乎是不明智的事情 – 2012-03-04 16:28:16
这几乎从来都不是一件明智的事情。你外在的问题是什么?几乎肯定有更好的解决方案。 – 2012-02-29 05:48:38
对于berkeley套接字,如果缓冲区中没有数据,则会发生超时,因此您会一直读取,直到收到N个字节或所需的时间过去。每次部分读取后,您必须更新超时值和请求字节数。没有举一个例子,因为不知道你是否对使用阻塞套接字的非asio解决方案感兴趣。 – tomasz 2012-03-03 01:03:08