應用程式層的poll 函數介紹

來源:互聯網
上載者:User

poll()函數:這個函數是某些Unix系統提供的用於執行與select()函數同等功能的函數,下面是這個函數的聲明:#include <poll.h>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; poll實現功能

poll和select實現功能差不多,但poll效率高,以後要多用pollpoll()接受一個指向結構'struct pollfd'列表的指標,其中包括了你想測試的檔案描述符和事件。事件由一個在結構中事件域的位元掩碼確定。當前的結構在調用後將被填寫並在事件發生後返回。在SVR4(可能更早的一些版本)中的
"poll.h"檔案中包含了用於確定事件的一些宏定義。事件的等待時間精確到毫秒 (但令人困惑的是等待時間的類型卻是int),當等待時間為0時,poll()函數立即返回,-1則使poll()一直掛起直到一個指定事件發生。下面是pollfd的結構。struct pollfd {int fd; /* 檔案描述符 */short events; /* 等待的事件 */short revents; /* 實際發生了的事件 */};與select()類似,當返回正值時,代表滿足響應事件的檔案描述符的個數,如果返回0則代表在規定時間內沒有事件發生。如發現返回為負則應該立即查看 errno,因為這代表有錯誤發生。如果沒有事件發生,revents會被清空,所以你不必多此一舉。
poll和select實現功能差不多,但poll效率高,以後要多用poll


poll()函數:這個函數是某些Unix系統提供的用於執行與select()函數同等功能的函數,下面是這個函數的聲明:#include <poll.h>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; poll實現功能

poll和select實現功能差不多,但poll效率高,以後要多用pollpoll()接受一個指向結構'struct pollfd'列表的指標,其中包括了你想測試的檔案描述符和事件。事件由一個在結構中事件域的位元掩碼確定。當前的結構在調用後將被填寫並在事件發生後返回。在SVR4(可能更早的一些版本)中的
"poll.h"檔案中包含了用於確定事件的一些宏定義。事件的等待時間精確到毫秒 (但令人困惑的是等待時間的類型卻是int),當等待時間為0時,poll()函數立即返回,-1則使poll()一直掛起直到一個指定事件發生。下面是pollfd的結構。struct pollfd {int fd; /* 檔案描述符 */short events; /* 等待的事件 */short revents; /* 實際發生了的事件 */};與select()類似,當返回正值時,代表滿足響應事件的檔案描述符的個數,如果返回0則代表在規定時間內沒有事件發生。如發現返回為負則應該立即查看 errno,因為這代表有錯誤發生。如果沒有事件發生,revents會被清空,所以你不必多此一舉。
poll和select實現功能差不多,但poll效率高,以後要多用poll


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.