多路I/O轉接服務器模型一(select)

多路I/O轉接服務器模型一(select)

1.select能監聽的文件描述符個數受限於FD_SETSIZE,一般爲1024,單純改變進程打開
的文件描述符個數並不能改變select監聽文件個數
2.解決1024以下客戶端時使用select是很合適的,但如果鏈接客戶端過多,select採用
的是輪詢模型,會大大降低服務器響應效率,不應在select上投入更多精力

 1 #include <sys/select.h>
 2 /* According to earlier standards */
 3 #include <sys/time.h>
 4 #include <sys/types.h>
 5 #include <unistd.h>
 6 int select(int nfds, fd_set *readfds, fd_set *writefds,
 7 fd_set *exceptfds, struct timeval *timeout);
 8 nfds: 監控的文件描述符集裏最大文件描述符加1,因爲此參數會告訴內核檢測前多少個文件描述符的狀態
 9 readfds:監控有讀數據到達文件描述符集合,傳入傳出參數
10 writefds:監控寫數據到達文件描述符集合,傳入傳出參數
11 exceptfds:監控異常發生達文件描述符集合,如帶外數據到達異常,傳入傳出參數
12 timeout:定時阻塞監控時間,3種情況
13       1.NULL,永遠等下去
14       2.設置timeval,等待固定時間
15       3.設置timeval裏時間均爲0,檢查描述字後立即返回,輪詢
16 struct timeval {
17 long tv_sec; /* seconds */
18 long tv_usec; /* microseconds */
19 };
20 void FD_CLR(int fd, fd_set *set); 把文件描述符集合裏fd清0
21 
22 FD_ISSET(int fd, fd_set *set); 測試文件描述符集合裏fd是否置1
23 void FD_SET(int fd, fd_set *set); 把文件描述符集合裏fd位置1
24 void FD_ZERO(fd_set *set); 把文件描述符集合裏所有位清0

 

posted @ 2016-05-02 23:43 General_up 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章