select()函数是怎样运行的

我个人的理解是:select()函数会查询timeout时间内状态套接字队列,如果里面的套接字在timeout时间内,可以读或者写,就留在队列中,select会遍历完三个... 我个人的理解是:select()函数会查询timeout时间内状态套接字队列,如果里面的套接字在timeout时间内,可以读或者写,就留在队列中,select会遍历完三个队列中所有的套接字,依次检查在timeout时间内是否可以读或者写。

请问我这样理解是对的吗?谢谢!
展开
 我来答
jhx1008
2013-01-25 · TA获得超过617个赞
知道小有建树答主
回答量:336
采纳率:0%
帮助的人:323万
展开全部
应该只有一个socket队列,每个socket对象上有3个状态
select遍历队列中的所有套接字,检查套接字中各个状态,发现有可用状态就回调相应的函数
select需要遍历所有的套接字,这就是是跟异步通信(linux下的epoll,windows下的完成端口)最大的区别,异步通信由操作系统通知那个套接字有可用状态,然后直接回调相应函数,不需要去遍历所有的socket
CrazedWolf
2013-01-25 · TA获得超过155个赞
知道答主
回答量:42
采纳率:0%
帮助的人:66.6万
展开全部
大致是这样,补充下
timeout=null时select将无限期阻塞直到最少一个socket轮询到
timeout=TIMEVAL结构时
如果timeval为{0,0}则轮询到一个socket立即返回
其他值则代表轮询的最大时间限制
希望对你有用
追问
谢谢您哈。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式