lighttpd为什么要accept多次呢

在lighttpd网络模型里面我们可以看到以下代码

 1 /* accept()s at most 100 connections directly
 2      *
 3      * we jump out after 100 to give the waiting connections a chance */
 4     for (loops = 0; loops < 100 && NULL != (con = connection_accept(srv, srv_socket)); loops++) {
 5         handler_t r;
 6 
 7         connection_state_machine(srv, con);
 8 
 9         switch(r = plugins_call_handle_joblist(srv, con)) {
10         case HANDLER_FINISHED:
11         case HANDLER_GO_ON:
12             break;
13         default:
14             log_error_write(srv, __FILE__, __LINE__, "d", r);
15             break;
16         }
17     }
18     return HANDLER_GO_ON;

顾名思义,当有连接来的时候,从select多路复用,但是我们处理连接的时候,我们不知道事件的来源和次数,所以要循环好、判断,我的猜测是这样的

下面来证明  这段代码是来自unix网络编程的sleect模型的服务端

 1  for ( ; ; ) {
 2                 rset = allset;          /* structure assignment */
 3                 nready = Select(maxfd+1, &rset, NULL, NULL, NULL);
 4 
 5                 if (FD_ISSET(listenfd, &rset)) {        /* new client connection */
 6                         clilen = sizeof(cliaddr);
 7                         connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
 8 
 9 
10                         printf("new client:1, fd %d\n",connfd);
11                          sleep(10);
12                         connfd1 = Accept(listenfd, (SA *) &cliaddr, &clilen);
13                           printf("new client:2, fd %d\n",connfd1);
14 
15                      sleep(10);         
16                       return 0;

我们故意在中间停顿了10秒,好让更多的连接进来,

启动服务端

[root@fire-16-168 tcpcliserv]# ./tcpservselect01

同时在另外两个个shell下面输入

./tcpcli01 127.0.0.1

这时候我们可以看多服务端输出

new client:1, fd 4
new client:2, fd 5

呵呵,证明我们的猜想是对的

如果我们不accept多次,那么要等下一次select才能处理,一次一个请求,so,效率很低罗,如果多个用户进来的时候

 

转载于:https://www.cnblogs.com/simonlu/p/3999853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值