免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: oract666
打印 上一主题 下一主题

[函数] send 和 recv 函数问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-09-05 20:19 |只看该作者
原帖由 oract666 于 2008-9-5 20:15 发表



如此也有问题,我用了MSG_WAITALL 参数,没用循环解决了
但是很想知道如果循环的话究竟怎么用?呵呵

循环差不多就是那么用的,有问题是啥?

论坛徽章:
0
12 [报告]
发表于 2008-09-05 20:21 |只看该作者
原帖由 tyc611 于 2008-9-5 20:19 发表

循环差不多就是那么用的,有问题是啥?



我这么用循环接收会出现ircv数大于数据包大小的情况,数据也是乱的,倒是MSG_WAITALL最管用
是不是我的循环有问题?

论坛徽章:
0
13 [报告]
发表于 2008-09-05 20:27 |只看该作者
原帖由 oract666 于 2008-9-5 20:21 发表



我这么用循环接收会出现ircv数大于数据包大小的情况,数据也是乱的,倒是MSG_WAITALL最管用
是不是我的循环有问题?

myinfo是结构体名?
如果是,将其转换为char*再与接收到的字节数相加
也就是ircv=ircv+recv(connfd,(char*)&myinfo+ircv,sizeof(myinfo)-ircv,0);

论坛徽章:
0
14 [报告]
发表于 2008-09-05 20:40 |只看该作者
原帖由 tyc611 于 2008-9-5 20:27 发表

myinfo是结构体名?
如果是,将其转换为char*再与接收到的字节数相加
也就是ircv=ircv+recv(connfd,(char*)&myinfo+ircv,sizeof(myinfo)-ircv,0);



没错,这次转换指针后就成功了!
多谢!

顺便再请教一下send大数据是否也要循环?

论坛徽章:
0
15 [报告]
发表于 2008-09-05 20:44 |只看该作者
原帖由 oract666 于 2008-9-5 20:40 发表



没错,这次转换指针后就成功了!
多谢!

顺便再请教一下send大数据是否也要循环?

数据太大,也得循环,系统缓冲区有限

论坛徽章:
0
16 [报告]
发表于 2008-09-05 20:48 |只看该作者
原帖由 tyc611 于 2008-9-5 20:44 发表

数据太大,也得循环,系统缓冲区有限



那就是说为了安全,send最好也要判断返回值大小和数据包的比较结果?
我现在有些应用根本没有判断就发走了,但是数据量很小一般几十个字节,MSG_WAITALL 参数同样适用于send吗?

呵呵,都是平时用tuxedo之类的习惯了,直接call。纯socket编程还是很多细节的啊

论坛徽章:
0
17 [报告]
发表于 2008-09-05 20:54 |只看该作者
原帖由 oract666 于 2008-9-5 20:48 发表



那就是说为了安全,send最好也要判断返回值大小和数据包的比较结果?
我现在有些应用根本没有判断就发走了,但是数据量很小一般几十个字节,MSG_WAITALL 参数同样适用于send吗?

呵呵,都是平时用tux ...

我用得也不多,基本上写好一个收发函数就不管了
MSG_WAITALL参数没用过,但如果是大数据,我想啥参数都不管用,因为系统缓冲区限制摆在那,直接你取走数据才有可用空间
所以还是最好都判断返回值,用循环做

论坛徽章:
0
18 [报告]
发表于 2008-09-05 22:08 |只看该作者
我猜是因为部分写入,检查send的返回值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP