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

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

我正在使用 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/

相关文章:

Java UDP客户端未从服务器接收(简单客户端服务器udp代码)

c++ - 破译损坏的 C++ 名称 $$F

c++ - 如何使用 SDL 修改像素?

c++ - 是否有可能像在 C++ 中那样在 C 中实现模板化

multithreading - 如何处理消息的并行处理?

c++ - Windows 中的多播响应未到达套接字

c++ - GetQueuedCompletionStatus 在 UDP 套接字上无限期阻塞

c++ - QListWidget 的高度与窗口的高度相同

java - 无法使测试方法与 Selenium 网格并行运行

linux - Bash 复杂的管道依赖