当前位置:  开发笔记 > 编程语言 > 正文

提升ASIO缓冲不起作用

如何解决《提升ASIO缓冲不起作用》经验,为你挑选了0个好方法。

我正在编写一个使用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中尝试它.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有