前面幾篇文章已經實現了shell指令碼執行和客戶端的**,我就不多寫了,直接上poll**。
poll**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define array_size(x) (sizeof(x)/sizeof(x[0]))
//求陣列元素的個數
intsocket_server_init
(char
*listen_ip,
int listen_port)
;int main (
int argc,
char
**ar**)
printf
("%s server start to listen on port %d\n"
,"59.110.42.24"
,serv_port)
;for
(i=0
; i<
array_size
(fds_arry)
; i++
)//遍歷陣列
fds_arry[0]
.fd = listenfd;
//將第乙個陣列賦值為listenfd
fds_arry[0]
.events = pollin;
//定義事件
max =0;
for(;;
)else
if( rv ==0)
if( fds_arry[0]
.revents & pollin )
//判斷指定描述符是否在集合中,相當於select判斷
found =0;
for(i=
0; i<
array_size
(fds_arry)
;i++)}
if(!found)
max = i>max ? i:max;
if( rv <=0)
continue;}
elseif(
(rv=
read
(fds_arry[i]
.fd,buf,
sizeof
(buf)))
<=0)
else}}
}}cleanup:
close
(listenfd)
;return0;
}int
socket_server_init
(char
*listen_ip,
int listen_port)
setsockopt
(listenfd, sol_socket, so_reuseaddr,
&on,
sizeof
(on));
memset
(&servaddr,0,
sizeof
(servaddr));
servaddr.sin_family=af_inet;
servaddr.sin_port =
htons
(listen_port);if
(!listen_ip )
else}if
(bind
(listenfd,
(struct sockaddr *
)&servaddr,
sizeof
(servaddr)
)<0)
if(listen
(listenfd,13)
<0)
cleanup:
if(rv <0)
close
(listenfd)
;else
rv = listenfd;
return rv;
}
poll 比select要好一些,他多了乙個結構體,裡面包含的是
struct polld
在select中是將rset置1來判斷那個收到了資料,poll是通過收到資料,將收到資料的陣列(struct pollfd fds_arry[1024]
),那一位給乙個pollin訊號(fds_arry[0].events = pollin
),然後下面進行判斷
他比select好在:
1、可以建立很多給描述符,而select只能1024個。
2、他不需要修改fds_arry(就是select的rset,因為select每次要復位為0)
select多路復用壓力測試
1 shell指令碼 bin bash bin bash for i 1 i 1100 i i 1 do.a echo i sleep 0.005 done echo 8 cat test.log grep f wc l cat test.log grep o wc l echo 2 客戶端 inc...
epoll多路復用壓力測試
epoll相對於select poll效能優越相當之多,可以說是二者結合加強版本,我們可以設想一下,假如有100w個tcp連線,那麼每次有資料過來了,select poll都需要去從第乙個到最後乙個進行依次遍歷,而epoll會講佇列排序講發生事件放在前面,後面的就不用遍歷了,所以準確的說處理幾千的連...
I O多路復用 poll
函式結構 int poll struct pollfd fds,nfds t nfds,int timeout 引數 返回值 和select一模一樣 events和revents events 關注事件 讀就緒 寫就緒 異常 輸入的時候起作用 revents 輸出結果,輸出的時候起作用 輸入輸出引數...