免费注册 查看新帖 |

Chinaunix

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

select两次,会调用两次吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-02 17:41 |只看该作者 |倒序浏览
比如

// fd ,rfd,tv都是一样的
void func1()
{
select( fd+1 ,&rfd,NULL,NULL,&tv);
// A
...
}
void func2()
{
select( fd+1,&rfd,NULL,NULL,&tc);
// B
....
}

然后
func1();
func2();

现在fd有数据可以读时是不是A和B都会执行的?
谢谢~

论坛徽章:
0
2 [报告]
发表于 2008-04-02 17:58 |只看该作者
func1没返回就轮不到func2执行

论坛徽章:
0
3 [报告]
发表于 2008-04-02 18:05 |只看该作者
原帖由 darkslack 于 2008-4-2 17:41 发表
比如

// fd ,rfd,tv都是一样的
void func1()
{
select( fd+1 ,&rfd,NULL,NULL,&tv);
// A
...
}
void func2()
{
select( fd+1,&rfd,NULL,NULL,&tc);
// B
....
}

然后
func1();
func2();
...



是的, 当第一次发了数据过来读取之后, fun1()返回了.
此时连接不断开, 进入到fun2()后继续在select()等待, 此时再发送一个数据过来之后, select仍然会返回, 并在后续的read中读取数据.

论坛徽章:
0
4 [报告]
发表于 2008-04-02 19:23 |只看该作者
假如又有一个函数
func3(int fd)
{
select( fd+1,&rfd,NULL,NULL,&tc);
//C
}

接着调用两次
func3( 9 );
func3( 12 );

然后 9 有数据读第一次调用返回,然后12有数据读第二次调用返回

然后9又有数据读,这是是不是还是会回到func3的C的? 是不是内核就会一直监听9和12?


再如:
假如第一次
select( fd+1,&rfd,NULL,NULL,NULL);

select( fd+1,&rfd,NULL,NULL,&tc); //这时设置了一个超时
是不是第二次select覆盖第一次的?
谢谢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2008-04-02 19:49 |只看该作者
原帖由 darkslack 于 2008-4-2 19:23 发表
再如:
假如第一次
select( fd+1,&rfd,NULL,NULL,NULL);

select( fd+1,&rfd,NULL,NULL,&tc); //这时设置了一个超时
是不是第二次select覆盖第一次的?


每个select 是独立的..

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2008-04-02 20:10 |只看该作者
难说,很难说。

论坛徽章:
0
7 [报告]
发表于 2008-04-02 21:08 |只看该作者
可以自己编程试试吧. 先自己试了再把试的结果拿出来. 没有实验就猜不太好.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP