免费注册 查看新帖 |

Chinaunix

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

关于select调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-17 16:33 |只看该作者 |倒序浏览
大家好,今天学习c语言select调用,有个问题求解。
环境:REHL AS 4
select()的调用形式为:
#include <sys/select.h>
#include <sys/time.h>
int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, const struct timeval *timeout);

很多资料对timeout的解释基本如下:
1.timeout为0,调用立即返回,或者说立即超时。
2.timeout为NULL,select()调用就阻塞,直到知道有文件描述符就绪;
3.timeout为正整数,就是一般的定时器。

问题在这里:我写了段代码测试,timeout设置成0时,也没有返回或者立即超时啊。他跟NULL一样,一直阻塞。而且,NULL的整型值不就是0吗?
不明白,哪位老师能否给解释一下timeout为0时是怎样一种情况,有部分代码说明最好。
谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-07-17 17:11 |只看该作者
0的时候就应该是无限阻塞吧!

如果楼主想即时返回,可以将描述符设定成非阻塞的!

论坛徽章:
0
3 [报告]
发表于 2008-07-17 17:14 |只看该作者
网上查了些资料,说0是立即超时,上面说的是立即返回,并不是无限阻塞,如果无限阻塞了那NULL用来干什么?
我不是想立即返回,我只是不明白,timeout设置成NULL和设置成0,有什么不同?

[ 本帖最后由 legone2008 于 2008-7-17 17:15 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-07-17 17:18 |只看该作者
是否立即返回应该取决于socket工作在是否阻塞的模式吧

论坛徽章:
0
5 [报告]
发表于 2008-07-17 19:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2008-07-17 19:22 |只看该作者
楼主,0指的是timeout指向的结构中的值为0

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
7 [报告]
发表于 2008-07-17 21:38 |只看该作者
struct timeval *timeout

struct timeval为结构体,有两个成员变量:
tv_sec:秒数
tv_usec:百万分之一秒

例如:
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;

select(..., &timeout);
表示超时时间为10秒

论坛徽章:
0
8 [报告]
发表于 2008-07-17 21:59 |只看该作者
对,前面的说得对,.tv_sec = 0和.tv_usec = 0表示立即返回。
select是否阻塞,跟select监视的描述符是否阻塞没有任何关系。

论坛徽章:
0
9 [报告]
发表于 2008-07-17 22:21 |只看该作者
有点像同步调用和异步调用

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
10 [报告]
发表于 2008-07-17 22:41 |只看该作者
原帖由 bobozhang 于 2008-7-17 21:59 发表
对,前面的说得对,.tv_sec = 0和.tv_usec = 0表示立即返回。
select是否阻塞,跟select监视的描述符是否阻塞没有任何关系。

同意
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP