免费注册 查看新帖 |

Chinaunix

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

关于EINTR和EWOULDBLOCK中断的问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2004-03-11 10:09 |显示全部楼层

关于EINTR和EWOULDBLOCK中断的问题

这个问题说起来话长。
你是想实现write还是想用write?

论坛徽章:
0
2 [报告]
发表于 2004-03-11 11:23 |显示全部楼层

关于EINTR和EWOULDBLOCK中断的问题

非阻塞模式下也要判EINTR的,阻塞模式只判EINTR就够了。

论坛徽章:
0
3 [报告]
发表于 2004-03-11 12:04 |显示全部楼层

关于EINTR和EWOULDBLOCK中断的问题

EWOULDBLOCK用于非阻塞模式,当然不要重新read/write了,而EINTR只是简单地重新read/write就行了。

论坛徽章:
0
4 [报告]
发表于 2004-03-11 13:55 |显示全部楼层

关于EINTR和EWOULDBLOCK中断的问题

这个程序是死读的,即对非阻塞的Handle也进行阻塞读,这就失去了非阻塞的意义。

实际上,这个函数的意义是:不管你给我什么样的Handle(阻塞或非阻塞),我都阻塞地读一个包。

论坛徽章:
0
5 [报告]
发表于 2004-03-11 14:58 |显示全部楼层

关于EINTR和EWOULDBLOCK中断的问题

对于非阻塞Handle,只要read到EWOULDBLOCK就可以了;对于阻塞Handle,一般没有办法判断,只能在应用层解决了。

有些应用的情况下,对方发来的包是没有长度信息的,但使用write发包,且包的长度不是很长,这样的情况下,一个read也可以解决问题。

对于以包为单位的数据交换,我觉得应该使用read/write代替send/recv,因为前者是不缓冲的,不会破坏小数据包的完整性;而后者是缓冲的,不容易得到期望的结果,除非包与包之间有足够的时延。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP