网站大量收购独家精品文档,联系QQ:2885784924

lighttpd1.4.18代码分析(五).doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lighttpd1.4.18代码分析(五).doc

  lighttpd1.4.18代码分析(五)   本节相对简单, 讲讲lighttpd中如何处理超时的连接.   方法很简单, lighttpd创建一个每隔一秒触发的定时器, 被触发后查找当前的所有连接, 看它们的时间是否已经超过了最长的生存期, 如果是就关闭连接.   创建定时器的代码在server.c的main函数中: #ifdef USE_ALARM     struct itimerval interval;     interval.it_interval.tv_sec = 1;     interval.it_interval.tv_usec = 0;     interval.it_value.tv_sec = 1;     interval.it_value.tv_usec = 0; #endif #ifdef USE_ALARM     // 定时     signal(SIGALRM, signal_handler);     /* setup periodic timer (1 second) */     if (setitimer(ITIMER_REAL, interval, NULL)) {         log_error_er failed);         return -1;     }     getitimer(ITIMER_REAL, interval); #endif   定时器触发的时候产生ALARM信号,此时在服务器主循环中轮询所有的连接,这段代码同样在server.c的main函数中:         // 如果产生了alarm信号 那么一秒钟过去了         if (handle_sig_alarm) {             /* a ne = 0; #endif             /* get current time */             // 获得当前的时间             min_ts = time(NULL);             // 如果当前时间不等于server上次记录的时间             if (min_ts != srv-gt;cur_ts) {                 int cs = 0;                 connections *conns = srv-gt;conns;                 handler_t r;                 sin_ts;                 /* cleanup stat-cache */                 // 每秒清空一次stat cache                 stat_cache_trigger_cleanup(srv);                                 /**                  * check all connections for timeouts                  */                 // 检查所有连接是否已经超时                 for (ndx = 0; ndx lt; conns-gt;used; ndx++) {                     int changed = 0;                     connection *con;                     int t_diff;                     con = conns-gt;ptr[ndx];                     if (con-gt;state == CON_STATE_READ ||                         con-gt;state == CON_STATE_READ_POST) {                         if (con-gt;request_count == 123下一页 ....,。1) {                             // 如果当前时间与read_idle_ts之差大于max_read_idle, 超时                             if (srv-gt;cur_ts - con-gt;read_idle_ts gt; con-gt;conf.max_read_idle) {                                 /* time - out */                       

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档