網路程式設計之 多路IO轉接 select模型改進

2021-10-23 09:47:27 字數 890 閱讀 2840

select模型中在處理監聽事件時需要對檔案描述符依次遍歷,此處可以稍作改進,避免不必要的遍歷。

改進思路

定義乙個fd_setsize大小的陣列,用於儲存有效連線

定義乙個下標變數用於記錄儲存連線陣列中的有效連線最大下標,供遍歷作為上限值使用

int maxc =-1

;int client[fd_setsize]

;//儲存連線的檔案描述符

for(

int k=

0;k++k)

//初始化

連線時處理

if

(fd_isset

(lfd,

&rset)

)//判斷監聽檔案描述符狀態}if

(i == fd_setsize)

fd_set

(cfd,

&allset)

;//將連線的描述符存入集合

if(maxfd < cfd)

//重設最大檔案描述符

if(i>maxc)

if(lnum ==1)

}

遍歷處理事件

for

(i=0

;i<=maxc;

++i)

//遍歷處理讀集合中的描述符請求if(

fd_isset

(cfd,

&rset)

)else

if(n>0)

write

(cfd,buf,n);}

}if(lnum ==1)

}

網路程式設計之 多路IO轉接 select模型

select模型 優點 可跨平台 實現多路復用 避免了頻繁建立多程序 多執行緒處理連線產生的開銷,提高了連線處理效率 缺點 最多監聽1024個檔案描述符 事件處理時需要依次遍歷,帶來不必要的開銷 select函式原型 nfds 最大描述符加1 readfds 輸入輸出引數 返回讀事件檔案描述符集合 ...

Linux網路程式設計之多路I O復用

1.select函式 include int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout void fd clr int fd,fd set set int fd iss...

網路程式設計 多路I O轉接伺服器之select

思路 利用select 函式監聽資訊,accept 函式非阻塞的建立連線。相關api include according to earlier standards include include include intselect int nfds,fd set readfds,fd set wri...