免费注册 查看新帖 |

Chinaunix

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

non block socket and select [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-09 12:08 |只看该作者 |倒序浏览
使用non block socket和select时遇到了问题,希望各位看下

问题描述:
我先创建一个server socket,把这个socket设为non block,然后select read这个socket,select返回时,判断这个server socket是否被set,如果是,则accept,并把accept返回的socket也设为non block并且加到select read set中,select返回时同样检查是否被set,如果是,则recv数据,但是在recv返回错误:
“EAGAIN Resource temporarily unavailable”,并且select再也不汇报该socket可读(我的select是在一个while(1)的循环中),也就是说我没法接收网络上来的数据,如果不把accpet返回的socket设置为non block,则可以正常接收数据。

谢谢各位啦!

论坛徽章:
0
2 [报告]
发表于 2007-04-09 13:43 |只看该作者
刚才仔细看了一下select的说明:关于ready的定义如下:
“Those  listed  in readfds will be watched to see if characters become available for read-ing (more precisely, to see if a read will not block - in particular, a file  descriptor  is also ready on end-of-file)”,如果根据这个定义,我把socket设成non block了,任何时候recv都不会被阻塞,那么select应该一直返回才对,而且根据这个定义,select应该与block io一起使用。。。想不明白了,再仔细查下资料先。

论坛徽章:
0
3 [报告]
发表于 2007-04-09 14:02 |只看该作者
彷佛是应该与block io 一起用,汗...
为什么我昨天在网上找的例子都是non block socket + select,再汗一个。。。

论坛徽章:
0
4 [报告]
发表于 2007-04-09 14:14 |只看该作者
但是如果是block io,如果由于意外情况被阻塞了怎么办?是不是还是该用non block io,而且select也确实是在“可读(有数据的时候)”才返回的,只是读的时候需要做出判断,但这个判断不又是一个loop了嘛?不懂了,实在是不懂了
KingofSC 该用户已被删除
5 [报告]
发表于 2007-04-09 15:39 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2007-04-09 15:44 |只看该作者
原帖由 tianqio 于 2007-4-9 14:02 发表
彷佛是应该与block io 一起用,汗...
为什么我昨天在网上找的例子都是non block socket + select,再汗一个。。。



汗。。。。

select怎么用, 跟block or nonblock没关系。

论坛徽章:
0
7 [报告]
发表于 2007-04-09 15:53 |只看该作者
楼上的对,偶刚才也看到select跟block与non block无关,唉,调的辛苦啊,还有问题,郁闷中

论坛徽章:
0
8 [报告]
发表于 2007-04-09 16:10 |只看该作者
如果set 了多个fd,是不是select之后得重新FD_SET?

论坛徽章:
0
9 [报告]
发表于 2007-04-09 16:17 |只看该作者
偶终于想明白了,在select返回后对于!FD_ISSET的FD得重新FD_SET,如果下次循环还想检查这个FD。唉,晕掉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP