2011-02-08 80 views
1

我使用boost :: asio来创建服务器应用程序,特别是UDP API。现在我使用async_receive_from从一个池中启动多个线程来监听单独的缓冲区。这在我主要开发的Ubuntu上非常适用。多个并行调用到udp :: socket :: async_receive_from - 未定义的行为?

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

我看过boost :: asio文档,我知道写/读自由函数必须被串行调用 - 但我一直无法找到关于async_receive_函数是否适用的任何信息。

我应该直接调用async_receive_吗?

回答

2

它适用于所有async_xxx功能,直到前一个完成,你必须永远不会调用一个函数在给定插座上 - 或者你会用垃圾(或未定义行为)结束了......

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

编辑更多:如文档所示,例如在async_read_some调用的处理程序中执行,例如排队下一次读取。

+0

谢谢!需要更多的代码在我身边,但现在它工作正常。 :) – Max 2011-02-09 22:14:24