在linux中我們可以通過man + 函式名, 命令檢視linux程式設計手冊從而檢視乙個函式的具體用法。
select函式原型為:
int
select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
需要包含的標頭檔案有:
#include
/* according to earlier standards */
#include
#include
#include
其中個引數總結如下:
在網路程式設計中使用select的優缺點可簡單總結為:
優點:可移植性強,可同時處理多個連線請求;
缺點:1.監聽描述符個數有上限–1024,可以修改標頭檔案,但需要重新編譯;
2.需要定義陣列儲存所有描述符值,以便在新連線到來或者有舊連線關閉時可以重新確定最大的描述符值;
3.每次處理完畢後,需要清空並重新向集合中新增新描述符,因為select 對描述符狀態的改變是直接在原有基礎上改變的,因此需有每次清空;
4.select 並不會告訴我們哪乙個描述已經就緒,只是在原有集合上修改狀態,因此當我們處理的時候,需要迴圈遍歷集合中的所有描述符才能判斷哪乙個是就緒描述符—(當監聽數目過大時,效率較低)。
select使用步驟:
1.建立socket
2.定義監聽位址資訊,並為socket 繫結監聽位址
3.開始監聽(告訴系統開始監聽位址是否有資料到來)
4.將socket 描述新增到select 的監聽集合中。監聽集合用於select監聽判斷集合中的描述符是否就緒
5.select開始監聽
6.select返回值
7.當描述符就緒,判斷描述符是否=監聽socket 描述符(代表有新連線請求)
8.=socket 監聽符(accept 處理新的連線請求)
!=監聽socket描述符(代表有傳輸資料到來),接受收據
9.接受出錯,將描述符從select監聽集合中刪除,並關閉,重新確定最大的描述符值
10.關閉socket網路套接字。
select函式用法
原型 int select intnfds fd set readfds fd set writefds fd set exceptfds const struct timeval timeout nfds 本引數忽略,僅起到相容作用。readfds 可選 指標,指向一組等待可讀性檢查的套介面。wr...
Select函式用法
select函式用於在非阻塞中,當乙個套接字或一組套接字有訊號時通知你,系統提供select函式來實現多路復用輸入 輸出模型,原型 include include int select int maxfd,fd set rdset,fd set wrset,fd set exset,struct t...
select函式總結
阻塞方式block,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如果事件沒有發生,程序或執行緒就被阻塞,函式不能立即返回。使用select就可以完成非阻塞non block,就是程序或執行緒執行此函式時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函式的執 況,如果事件...