boost - boost asio 中的多个 async_read_some(非组合 asyc_read)行为
问题描述
元
我知道这看起来像asio 的副本:多个挂起的 async_read?但不是,因为那里的 OP 实际上是在问他/她在评论中也说过的async_read
不是。同样与他或她的问题相反,我只能发现多个s 是不允许的。TCP 套接字和串行端口的文档都没有提及它。async_read_some
async_read
async_read_some
问题
是否不允许多次async_read_some
通话?如果不是,我会假设 boost asio 的文档前摄器行为,我读了一些东西,第一个发布的处理程序async_read_some
将被执行,并且只有在下一次读取之后,FIFO 队列概念中的第二个处理程序。(假设我们不会有 0 个读取)。如果不允许,有人可以帮助我提供指向文档的指针吗?
解决方案
不,不允许多个 async_read_some 操作。相当没用
您必须同步对套接字对象的访问(它不是线程安全的)和使用的缓冲区。
此外,不能保证异步操作完成的顺序。由于在网络层上拆分数据包的非确定性方式,很难有效地解释“同时”接收到的所有片段。这可能不是问题,例如,如果您只是在做一个接收到的唯一八位字节的直方图,但这是一个人为的例子。
启动处理程序的顺序可能会受到影响(请参阅https://stackoverflow.com/a/19963481/85371)。
推荐阅读
- python - 在python中生成一个不重复的随机数而不给出范围
- palantir-foundry - 如果我们需要使用 magrite 代理进行两步休息 api 调用?怎么走一样?
- haskell - 递归解决有关访问无限列表的某些元素的问题
- javascript - 悬停在其他元素下方的元素可能悬停
- vue.js - Gitlab CI / Pipelines 中忽略了 VueJS Webpack 别名
- emacs - emacs 在 gud 调试命令上保存所有缓冲区
- julia - Julia 中的类型错误
- dll - Inno Setup“外部”子句是否负责加载和上传?
- ruby - Rails 使用 has_many 自我引用一个模型
- php - 为什么今天的工作日加二不工作?