日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/3/11 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。