免费注册 查看新帖 |

Chinaunix

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

请教一个关于接收网络数据的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-07-18 11:29 |只看该作者
原帖由 sillydog825 于 2006-7-18 11:26 发表
现在找到一个用信号的方案来获得数据到达的通知,可是发送较大量数据的时候,信号好象会丢失,数据实际止都到了,但给的信号不够,导致最后数据收不完全,唉。。。
用select 和poll都是一种被动的方式,那样根本 ...


不要把windows下的理念带到linux里来,而且信号和消息是不同的,重复信号被丢了。

论坛徽章:
0
12 [报告]
发表于 2006-07-18 11:46 |只看该作者
原帖由 sillydog825 于 2006-7-18 11:26 发表
现在找到一个用信号的方案来获得数据到达的通知,就是先挂上信号处理程序,再将socket设非阻塞方式,然后在信号处理程序中接收数据。可是发送较大量数据的时候,信号好象会丢失,数据实际止都到了,但给的信号不够 ...

1)再将socket设非阻塞方式可以解决这个问题.你好好看看就知道了.确认对方什么时候数据发送完,可以是本地什么时候收到对方的FIN,结合shutdown()函数和select的超时设置可以解决.
2)异常断开,可用TCP带外数据结合SIGURG写个心博函数解决.

论坛徽章:
0
13 [报告]
发表于 2006-07-18 12:45 |只看该作者
谢谢楼上的
心博函数是什么?是字打错了?信号处理函数吗?

论坛徽章:
0
14 [报告]
发表于 2006-07-18 13:07 |只看该作者
信号是不安全的,建议最好少用,尤其是关键操作

网络接收数据一般都用selct,设置一个超时,个人感觉没有必要区别是对方不发数据了还是连接异常断开,或是否一次接收对方n次发送的数据,只要超时就关闭连接,进行下一次监听,网络接收数据发生异常是很正常的,关键是客户端应该有重发的机制,还有就是超时要设置合理,各服务和客户端要配合起来,这是个人的一点见解,不对的地方请大家指正

论坛徽章:
0
15 [报告]
发表于 2006-07-18 17:21 |只看该作者
原帖由 linxd0726 于 2006-7-18 13:07 发表
信号是不安全的,建议最好少用,尤其是关键操作

网络接收数据一般都用selct,设置一个超时,个人感觉没有必要区别是对方不发数据了还是连接异常断开,或是否一次接收对方n次发送的数据,只要超时就关闭连接,进行下一 ...


说得对,下午已经决定不用信号了。还是用select保险。内核发出来的信号简直没谱。一会多一会少,数据读完了还有信号,真晕。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP