poll 和select 使用總結

2021-06-18 03:45:07 字數 1289 閱讀 2746

poll:

poll函式和select函式功能十分相似,函式宣告:

int poll(struct pollfd fds,nfds_t nfds, int timeout);

引數說明:

fds:是乙個struct pollfd結構型別的陣列

,用於存放需要檢測其狀態的socket描述符;每當

呼叫這個函式之後,系統不會清空這個

陣列,操作起來比較方便;特別是於

socket

連 接比較多的情況下,在一定程度上可以提高處理的效率;這一點與

select()

函式不同,

呼叫select()

函式之後,

select()

函式會清空它所檢測的

socket

描述符集合,導致每次調

用select()

之前都必須把

socket

描述符重新加入到待檢測的集合中;因此,

select()

函式適合於只檢測乙個

socket

描述符的情況,而

poll()

函式適合於大量

socket

描述符的情況;

nfds

:nfds_t型別的引數,用於標記陣列

fds中的結構體

元素的總數量;

timeout:是poll函式呼叫

阻塞的時間,單位:毫秒;

返回值:

>0:陣列fds

中準備好讀、寫或出錯狀態的那些socket描述符的總數量;

==0:陣列fds

中沒有任何socket描述符準備好讀、寫,或出錯;此時poll超時,超時時間 是timeout毫秒;換句話說,如果所檢測的socket描述符上沒有任何事件發生的話,那麼poll()函式會阻塞timeout所指定的毫秒時間長度之後返回,如果timeout==0,那麼poll() 函式立即返回而不阻塞,如果timeout==inftim,那麼poll() 函式會一直阻塞下 去,直到所檢測的socket描述符上的感興趣的事件發生是才返回,如果感興趣的事件永遠不發生,那麼poll()就會永遠阻塞下去;

-1: poll函式呼叫失敗,同時會自動設定全域性變數errno;

struct pollfd結構體介紹:

structpollfd

else if(poll_fds[i].revents & pollerr)

} break; }}

select和poll的用法

select 函式的作用 系統呼叫select和poll的後端實現,用這兩個系統呼叫來查詢裝置是否可讀寫,或是否處於某種狀態。如果poll為空,則驅動裝置會被認為即可讀又可寫,返回值是乙個狀態掩碼 如何使用select 函式?select 函式的介面主要是建立在一種叫 fd set 型別的基礎上。它...

select和poll函式講解

五種io處理模型 阻塞性io模型 在這種模型下,若呼叫的io函式沒有完成相關的功能,則會使程序掛起,直到相關資料到達才會返回,如常見的管道裝置,終端裝置,網路裝置進行讀寫時經常出現這種情況 非阻塞型io模型 在這種模型下,當請求的io操作不能完成時,則不讓程序睡眠,而且立即返回,非阻塞io使使用者可...

IO復用 select和poll 簡介

b contains b list 1 select 2 poll list b i o復用模型使用在下列網路應用場合 b list 1 當客戶處理多個fd時,必須使用i o復用。2 乙個客戶同事處理多個套接字是可能的。3 如果乙個tcp伺服器處理多個socket。4 如果乙個伺服器處理多個協議。l...