免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4278 | 回复: 3
打印 上一主题 下一主题

[C++] boost::asio中receive包的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-23 16:29 |只看该作者 |倒序浏览
在boost::asio中的io_service提供了receive,read_some等收包的方法。
我用他们从网络上循环收包时遇到一个问题:
当read_some没有收到指定的长度时就会一直阻塞,除非对端关闭连接,会产生一个 boost::asio::error::eof,否则无法跳出来;
请问asio能不能像linux的read,recv等函数一样,最后返回实际接收长度?

io_service ios;
char buf[1024];
int len;
while(1)
{

len = ios.read_some(boost::asio::buffer(bearer, 1024), error);
if (error == boost::asio::error::eof) break;
}

[ 本帖最后由 sjh_311 于 2008-6-24 12:35 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-06-23 18:24 |只看该作者
你让它从流里读数据,只要流没有结束,它当然会一直读,直到指定数据接收完毕

论坛徽章:
0
3 [报告]
发表于 2008-06-24 01:12 |只看该作者
因为是阻塞的吧,你要设成异步的。不过你就不能用这种方法了。
要用异步的方法。

论坛徽章:
0
4 [报告]
发表于 2008-06-24 12:36 |只看该作者
问题解决了,谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP