网站大量收购独家精品文档,联系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如何处理连接fd.   在第四节,已经讲解了如何处理服务器负责监听连接的fd,处理连接fd的流程在前半部分与监听fd大体相同:在通过监听fd接收一个新的连接之后,服务器将这个fd加入到事件处理器中, 设置它所感兴趣的IO事件类型, 当IO状态发生变化时, 事件处理器获取被触发的fd,回调函数,事件等,然后通过已经注册的回调函数进行处理.   这里的区别就在于回调函数的不同上.对于监听fd而言, 该回调函数是p; FDEVENT_IN) {         con-gt;is_readable = 1;     }          // 可写     if (revents  FDEVENT_OUT) {         con-gt;is_p; ~(FDEVENT_IN | FDEVENT_OUT)) {         /* looks like an error */         /* FIXME: revents = 0x19 still means that  the queue */         if (revents  FDEVENT_HUP) {             if (con-gt;state == CON_STATE_CLOSE) {                 con-gt;close_timeout_ts = 0;             } else {                 /* sigio reports the p; FDEVENT_ERR) { #ifndef USE_LINUX_SIGIO             log_error_p;         !chunk 1234下一页 ....,。queue_is_empty(con-gt;p;         con-gt;is_p;b)) {             log_error_eout_ts = 0;         }     }          return HANDLER_FINISHED; }   在结构体connection,也就是保存连接相关数据的结构体中, 有一个叫state的成员, 顾名思义, 这个成员保存的是一个连接的状态,这里所说的状态与前面提到的IO状态是不同, IO状态是用于表示一个fd可读/可写/出错等, 而这个状态更多的是与协议相关的部分.它是一个枚举类型: /* cessed  * read before  {     CON_STATE_CONNECT,            // 连接     CON_STATE_REQUEST_START,    // 开始获取请求     CON_STATE_READ,                // 处理读     CON_STATE_REQUEST_END,        // 请求结束     CON_STATE_READ_POST,        // 处理读,但是是POST过来的数据     CON_STATE_HANDLE_REQUEST,    // 处理请求     CON_STATE_RESPONSE_START,    // 开始回复     CON_STATE_WRITE,            // 处理写     CON_STATE_RESPONSE_END,        // 回复结束     CON_STATE_ERROR,            // 出错     CON_STATE_CLOSE                // 连接关闭 } connection_state_t;   为什么需要这些状态?因为ligtrac/wiki/Docs%3AInternalHTTPStates   现在回到本章的主题中, lighttpd如何处理连接fd.   前面给出的处理连接fd的回调函数,最开始地方有一段代码:     joblist_append(srv, con);   这个函数将一个连接connection结构体放入到joblist中, 后面的部分根据不同的情况设置connection中的state字段,调用的是connection_set_state函数.   现在回到server.c函数中, 第四节中已经结合处理监听fd的流程讲解了这段函数:         // 轮询FD         if ((n = fdevent_poll(sr 上一页1234下一页 ....,。v-gt;ev, 1000)) gt; 0) {      

文档评论(0)

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

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

1亿VIP精品文档

相关文档