linux中fd函数,linux socket中select()函数以及FD_ZERO FD_SET FD_CLR FD_ISSET

linux socket非阻塞编程时常见到如下的code:

socket   s;

.....

fd_set   set;

.....

struct timeval tv;

while(1)

{

FD_ZERO(&set);//将你的套节字集合清空

FD_SET(s,   &set);//加入你感兴趣的套节字到集合,这里是一个读数据的套节字s

tv.tv_sec = 3;

tv.tv_usec = 0;

select(maxfd+1,NULL,&set,NULL,&tv);//检查套节字是否可读,

//很多情况下就是是否有数据(注意,只是说很多情况)

//这里select是否出错没有写

// timeout 时间为3s

if(FD_ISSET(s,   &set)   //检查s是否在这个集合里面,

{                                           //select将更新这个集合,把其中不可读的套节字去掉

//只保留符合条件的套节字在这个集合里面

recv(s,...);

}

//do   something   here

}

(1)FD_ZERO(&set);则set用位表示是0000,0000。     (2)若fd=5,执行FD_SET(fd,&set);后set变为0001,0000(第5位置为1)     (3)若再加入fd=2,fd=1,则set变为0001,0011     (4)执行select(6,0,&set,0,&tv)阻塞等待     (5)若fd=5发生可读事件,则select返回,此时set变为0000,0011。注意:没有事件发生的fd=5被清空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值