我正在编写一个使用ASIO/UDP在单个远程/区域设置端点对之间发送和接收的网络应用程序.我曾使用udp :: socket :: receive来接收数据,我的代码中的所有内容都在逻辑上工作,但是我丢失了大量的数据包.我发现的是,在接收功能未被阻止时收到的任何数据包都丢失了 - 它没有缓冲.这特别奇怪,因为我使用以下命令将接收缓冲区设置为2MB:
sock_udp.connect( remote_endpoint ); sock_udp.set_option( boost::asio::socket_base::receive_buffer_size(2*1024*1024) );
这个和事实,如果我只发送两个大约100字节的数据包,如果我花费任何时间处理第一个,我仍然会丢失第二个数据包.
我认为这可能是udp :: socket :: receive的缺陷,所以我重新编写了我的网络代码以供使用,udp::socket::async_receive
但我仍然遇到同样的问题.也就是说,一旦我的处理程序被调用,我丢弃任何数据包,直到我再次调用async_receive.
我从根本上误解了什么吗?是否有一种不同的方法我应该使用boost来缓冲传入的数据包?
如果有帮助的话,我已经验证了这在XCode中的OS X中使用他们的自定义gcc4.2构建以及使用gcc4.5的Ubuntu 10.10都会发生.我还没有能够在Windows中尝试它.