linux 查看socket 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被清空。
總結
以上是生活随笔為你收集整理的linux 查看socket fd,linux socket中select()函数以及FD_ZERO FD_SET FD_CLR FD_ISSET的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: n个小球放入m个盒子中_飞么盒子卫生巾自
- 下一篇: python四级考试时间_四级英语考试如