首页 > 解决方案 > boost asio 中的多个 async_read_some(非组合 asyc_read)行为

问题描述

我知道这看起来像asio 的副本:多个挂起的 async_read?但不是,因为那里的 OP 实际上是在问他/她在评论中也说过的async_read不是。同样与他或她的问题相反,我只能发现多个s 是不允许的。TCP 套接字和串行端口的文档都没有提及它。async_read_someasync_readasync_read_some

问题

是否不允许多次async_read_some通话?如果不是,我会假设 boost asio 的文档前摄器行为,我读了一些东西,第一个发布的处理程序async_read_some将被执行,并且只有在下一次读取之后,FIFO 队列概念中的第二个处理程序。(假设我们不会有 0 个读取)。如果不允许,有人可以帮助我提供指向文档的指针吗?

标签: boostboost-asio

解决方案


不,不允许多个 async_read_some 操作。相当没用

您必须同步对套接字对象的访问(它不是线程安全的)和使用的缓冲区。

此外,不能保证异步操作完成的顺序。由于在网络层上拆分数据包的非确定性方式,很难有效地解释“同时”接收到的所有片段。这可能不是问题,例如,如果您只是在做一个接收到的唯一八位字节的直方图,但这是一个人为的例子。

启动处理程序的顺序可能会受到影响(请参阅https://stackoverflow.com/a/19963481/85371)。


推荐阅读