我正在使用 boost::asio 创建服务器应用程序,特别是 UDP API。现在我从一个池中启动多个线程,使用 async_receive_from 监听单独的缓冲区。这在我主要开发的 Ubuntu 上效果很好。
但是,在针对 Windows 进行编译时,我的回调会针对每个已发送的缓冲区调用多次,其中只有一个报告已找到某些内容,其他报告已发送零字节。
我查看了 boost::asio 文档,我知道必须连续调用写/读自由函数 - 但我无法找到任何关于 async_receive_ 函数是否同样适用的信息。
我应该只调用一次 async_receive_ 吗?
最佳答案
它适用于所有 async_xxx
函数,您绝不能在给定套接字上调用函数,直到前一个套接字完成 - 否则您最终会遇到垃圾(或未定义的行为)......
编辑:我在 Linux 上工作,我很惊讶你看到它正常工作,而我绝对不会。
再编辑一些:按照文档中所示进行操作,例如,在 async_read_some
调用的处理程序中,将下一次读取排队。
关于c++ - 对 udp::socket::async_receive_from 的多个并行调用 - 未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939188/