【发布时间】:2012-03-18 15:29:53
【问题描述】:
我查看了asio documentation 中的异步超时示例,但我想知道是否可以在 S 秒超时的情况下进行异步读取(最多 N 个字节),但是如果发生超时,它将返回一个读取的字节缓冲区,直到发生超时,而不是错误代码。
例如,如果我要执行 1000 字节的读取 (recv),超时时间为 10 秒,并且在 10 秒滚动之前只有 300 字节到达,我希望返回这 300 字节 - 这是否可以使用阿西奥?甚至是 berkeley sockets 接口?
【问题讨论】:
-
这几乎不是明智之举。你的外在问题是什么?几乎可以肯定有更好的解决方案。
-
对于 berkeley 套接字,如果缓冲区中没有数据,您会超时,因此您会继续阅读,直到收到 N 个字节或经过所需的时间。每次部分读取后,您都必须更新超时值和请求字节数。不举例子,因为不确定您是否对使用阻塞套接字的非 asio 解决方案感兴趣。
标签: c++ sockets io boost-asio