我們在大量併發的時候epoll有高的效能,所以我們選擇用他去做乙個bs模型的web伺服器
web伺服器
網路上是epoll併發,在解析http命令是下面的思路
具體的主要看**的思路
;//去除前面的「/」
int n1=0;
char
*pname=name;if(
strlen
(pname)
<=1)
else
//通過對字元的轉換來處理中文編碼問題
strdecode
(pname, pname)
;printf
("[%s]\n"
, pname)
;//將快取區其他的請求行 空行 正文清空
while
((n1=
readline
(connfd,buf,
sizeof
(buf)))
>0)
;//判斷檔案是否存在
struct stat st;if(
stat
(pname,
&st)
<0)
else
elseif(
s_isdir
(st.st_mode)
)else
else
free
(namelist[num]);
write
(connfd,buffer,
strlen
(buffer)+1
);}free
(namelist);}
//傳送尾
send_file
(connfd,
"html/dir_tail.html");
}}}int
main
(int argc,
char
*ar**)
; sprintf (path,
"%s/%s"
,getenv
("home"),
"xixi/w_網路/http");
chdir (path)
;//建立網路描述符
int sfd=
socket
(af_inet,sock_stream,0)
;if(sfd<0)
//設定埠復用
int opt=1;
setsockopt
(sfd,sol_socket,so_reuseaddr,
&opt,
sizeof
(opt));
//初始化包含應用層和網路層的ip結構體
struct sockaddr_in ip,ipp;
ip.sin_family =af_inet;
ip.sin_port =
htons
(10034);
ip.sin_addr.s_addr =
inet_addr
("0.0.0.0");
=inet_addr("172.26.46.72");
socklen_t len =
sizeof
(ip)
;//繫結if(
bind
(sfd,
(struct sockaddr*
)&ip,len)
)//監聽if(
listen
(sfd,
155)
)//epoll跟結點的建立
int epfd=epoll_create (
1000);
if(epfd <0)
struct epoll_event tep,ep[
1000];
int client[
1000
],ret,n,socked;
char buf[
100]
;int max=-1
,connfd,j,cfd;
char str[
100]
;//將接收到的客戶端初始化為-1
for(
int i=
0;i<
1000
;i++
)//將監聽的檔案描述符上樹
tep.events=epollin;
tep.data.fd=sfd;
int res=
epoll_ctl
(epfd,epoll_ctl_add,sfd,
&tep);if
(res==-1
)//迴圈監聽
while(1
)for
(int i=
0;iif(connfd ==
1000)if
(j >max)
max=j;
tep.events=epollin;
tep.data.fd= connfd;
ret=
epoll_ctl
(epfd,epoll_ctl_add,connfd,
&tep);if
(ret==-1
)}else}}
close (sfd)
; close (epfd)
;return0;
}
基於 epoll 實現 web 伺服器
1.簡介 epoll 是 linux 平台下特有的一種 i o 復用模型實現,於 2002 年在 linux kernel 2.5.44 中被引入。在 epoll 之前,unix linux 平台下的 i o 復用模型包含 select 和 poll 兩個系統呼叫。隨著網際網路的發展,網際網路的使用...
基於epoll實現簡單的web伺服器
epoll 是 linux 平台下特有的一種 i o 復用模型實現,於 2002 年在 linux kernel 2.5.44 中被引入。在 epoll 之前,unix linux 平台下的 i o 復用模型包含 select 和 poll 兩個系統呼叫。隨著網際網路的發展,網際網路的使用者量越來越...
基於epoll實現簡單的web伺服器
epoll 是 linux 平台下特有的一種 i o 復用模型實現,於 2002 年在 linux kernel 2.5.44 中被引入。在 epoll 之前,unix linux 平台下的 i o 復用模型包含 select 和 poll 兩個系統呼叫。隨著網際網路的發展,網際網路的使用者量越來越...