- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lighttpd1.4.18代码分析(四).doc
lighttpd1.4.18代码分析(四)
前面介绍了lighttpd使用的p;(srv_socket-gt;fde_ndx), srv_socket-gt;fd, FDEVENT_IN);
}
return 0;
}
在这里, 调用函数fdevent_register注册fd到IO事件处理器中, 对于服务器监听fd而言,
它在fdnode中的回调函数handler是函数ber of events */
int revents;
int fd_ndx;
fd_ndx = -1;
do {
fdevent_handler handler;
void *context;
handler_t r;
// 获得处理这些事件的函数指针 fd等
// 获得下一个fd在fdarray中的索引
fd_ndx = fdevent_event_next_fdndx (srv-gt;ev, fd_ndx);
// 获得这个fd要处理的事件类型
revents = fdevent_event_get_revent (srv-gt;ev, fd_ndx);
// 获取fd
fd = fdevent_event_get_fd (srv-gt;ev, fd_ndx);
// 获取回调函数
handler = fdevent_get_handler(srv-gt;ev, fd);
// 获取处理相关的context(对server是server_socket指针, 对client是connection指针)
context = fdevent_get_context(srv-gt;ev, fd);
/* connection_handle_fdevent needs a joblist_append */
// 进行处理
switch (r = (*handler)(srv, context, revents)) {
case HANDLER_FINISHED:
case HANDLER_GO_ON:
case HANDLER_WAIT_FOR_EVENT:
case HANDLER_WAIT_FOR_FD:
break;
case HANDLER_ERROR:
/* should never happen */
SEGFAULT();
12345下一页 ....,。break;
default:
log_error_ost 100 connections directly
*
* p out after 100 to give the p; NULL != (con = connection_accept(srv, srv_socket)); loops++) {
handler_t r;
// 这里马上进入状态机中进行处理仅仅对应状态为CON_STATE_REQUEST_START这一段
// 也就是保存连接的时间以及设置一些计数罢了
connection_state_machine(srv, con);
switch(r = plugins_call_handle_joblist(srv, con)) {
case HANDLER_FINISHED:
case HANDLER_GO_ON:
break;
default:
文档评论(0)