对udp :: socket :: async_receive_from的多个并行调用 - 未定义的行为?

时间:2011-02-08 22:21:00

标签: c++ parallel-processing udp boost-asio

我使用boost :: asio来创建服务器应用程序,特别是UDP API。现在我从池中启动多个线程,使用async_receive_from监听单独的缓冲区。这在我开发的Ubuntu上很有用。

但是,在编译windows时,我的回调会被调用多次,每次发送缓冲区,只有一个报告发现了某些内容,其他人报告发送了零字节。

我查看了boost :: asio docs,我知道必须连续调用write / read自由函数 - 但是我无法找到有关async_receive_函数是否相同的任何信息。 / p>

我应该简单地调用一次async_receive_吗?

1 个答案:

答案 0 :(得分:2)

它适用于所有async_xxx函数,你必须永远不要在给定套接字上调用函数,直到前一个函数完成 - 或者你最终会得到垃圾(或未定义的行为)......

编辑:我在Linux上工作,我很惊讶你看到它正常工作,因为我绝对不会。

编辑更多内容:按照文档中的说明执行操作,例如在async_read_some调用的处理程序中,排队下一次读取。