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...