我使用boost :: asio来创建服务器应用程序,特别是UDP API。现在我从池中启动多个线程,使用async_receive_from监听单独的缓冲区。这在我开发的Ubuntu上很有用。
但是,在编译windows时,我的回调会被调用多次,每次发送缓冲区,只有一个报告发现了某些内容,其他人报告发送了零字节。
我查看了boost :: asio docs,我知道必须连续调用write / read自由函数 - 但是我无法找到有关async_receive_函数是否相同的任何信息。 / p>
我应该简单地调用一次async_receive_吗?
答案 0 :(得分:2)
它适用于所有async_xxx
函数,你必须永远不要在给定套接字上调用函数,直到前一个函数完成 - 或者你最终会得到垃圾(或未定义的行为)......
编辑更多内容:按照文档中的说明执行操作,例如在async_read_some
调用的处理程序中,排队下一次读取。