linux 查看socket fd,linux socket中select()函数以及FD_ZERO FD_SET FD_CLR FD_ISSET
linux socket非阻塞編程時(shí)常見(jiàn)到如下的code:
socket ? s;
.....
fd_set ? set;
.....
struct timeval tv;
while(1)
{
FD_ZERO(&set);//將你的套節(jié)字集合清空
FD_SET(s, ? &set);//加入你感興趣的套節(jié)字到集合,這里是一個(gè)讀數(shù)據(jù)的套節(jié)字s
tv.tv_sec = 3;
tv.tv_usec = 0;
select(maxfd+1,NULL,&set,NULL,&tv);//檢查套節(jié)字是否可讀,
//很多情況下就是是否有數(shù)據(jù)(注意,只是說(shuō)很多情況)
//這里select是否出錯(cuò)沒(méi)有寫(xiě)
// timeout 時(shí)間為3s
if(FD_ISSET(s, ? &set) ? //檢查s是否在這個(gè)集合里面,
{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //select將更新這個(gè)集合,把其中不可讀的套節(jié)字去掉
//只保留符合條件的套節(jié)字在這個(gè)集合里面
recv(s,...);
}
//do ? something ? here
}
(1)FD_ZERO(&set);則set用位表示是0000,0000。
(2)若fd=5,執(zhí)行FD_SET(fd,&set);后set變?yōu)?001,0000(第5位置為1)
(3)若再加入fd=2,fd=1,則set變?yōu)?001,0011
(4)執(zhí)行select(6,0,&set,0,&tv)阻塞等待
(5)若fd=5發(fā)生可讀事件,則select返回,此時(shí)set變?yōu)?000,0011。注意:沒(méi)有事件發(fā)生的fd=5被清空。
總結(jié)
以上是生活随笔為你收集整理的linux 查看socket fd,linux socket中select()函数以及FD_ZERO FD_SET FD_CLR FD_ISSET的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: n个小球放入m个盒子中_飞么盒子卫生巾自
- 下一篇: python四级考试时间_四级英语考试如