linux 多路IO轉接伺服器之poll

2021-10-07 10:57:44 字數 1581 閱讀 3523

;引數1是結構體陣列的首位址。

events的選取:

pollin普通或帶外優先資料可讀,即pollrdnorm | pollrdband

pollrdnorm 資料可讀

pollrdband 優先順序帶資料可讀

pollpri 高優先順序可讀資料

pollout普通或帶外資料可寫

pollwrnorm 資料可寫

pollwrband 優先順序帶資料可寫

pollerr發生錯誤

pollhup 發生掛起

pollnval 描述字不是乙個開啟的檔案

nfds 監控陣列中有多少檔案描述符需要被監控

timeout 毫秒級等待

-1:阻塞等

0:立即返回,不阻塞程序

>0:等待指定毫秒數,如當前系統時間精度不夠毫秒,向上取值

例子:

#include

#include

#include

#include

#include

#include

#include

#include

#include

"wrap.h"

#define maxline 80

#define serv_port 8000

#define open_max 1024

intmain

(int argc,

char

*ar**)

if(i == open_max)

/* 達到了最大客戶端數 */

perr_exit

("too many clients");

client[i]

.events = pollin;

/* 設定剛剛返回的connfd,監控讀事件 */

if(i > maxi)

maxi = i;

/* 更新client中最大元素下標 */if(

--nready <=0)

continue

;/* 沒有更多就緒事件時,繼續回到poll阻塞 */

}for

(i =

1; i <= maxi; i++

)else

perr_exit

("read error");

}else

if(n ==0)

elseif(

--nready <=0)

break;}

}}return0;

}

linux 多路IO轉接伺服器之select

多路io轉接伺服器也叫做多工io伺服器。該類伺服器實現的主旨思想是,不再由應用程式自己監視客戶端連線,取而代之由核心替應用程式監視檔案。1.select能監聽的檔案描述符個數受限於fd setsize,一般為1024,單純改變程序開啟的檔案描述符個數並不能改變select監聽檔案個數 2.解決102...

I O多路轉接之poll伺服器

函式說明 include int poll struct pollfd fds,nfds t nfds,int timeout 引數說明 fds 是乙個struct pollfd結構型別的陣列,用於存放需要檢測其狀態的socket描述符 每當呼叫這個函式之後,系統不會清空這個陣列,操作起來比較方便 ...

I O多路轉接 epoll伺服器

在前面的兩篇部落格中,我們介紹了最早期的select和改進版的poll 但是,他兩都沒有改進的就是,想要快速知道事件就緒並沒有得到改進,兩個全部是遍歷陣列,我們都知道它的時間複雜度就是o n 效率不是很高,時間複雜度達到o 1 才是高效的 epoll是linux特有的i o復用函式,它在實現和使用上...