这里所说的错误有两种:
1.http协议规定的错误,如404错误;
2.服务器运行过程中的错误,如write错误。
对于http协议规定的错误,这里的“错误”是针对客户端的。lighttpd返回相应的错误提示文件之后,相当于顺利的完成了一次请求,只是结果和客户端想要的不一样而已。
对于服务器运行中的错误,状态机进入CON_STATE_ERROR状态。常见的错误原因:客户端提前断开连接。比如你不停的刷新页面,在你刷新的时候,前一次的连接没有完成,但被浏览器强行断开。对于服务器而言,刷新前后的两个连接是不相干的,服务器在接收后一个连接的时候仍然会继续处理前一次的连接。而前一次的连接已断开,这就产生了连接错误。
进入CON_STATE_ERROR状态后,如果前面的请求处理已经得到了结果。也就是http_status不为空。那么调用plugins_call_handle_request_done告诉插件请求处理结束:
/* even if the connection was drop we still have to write it to the access log */
if (con->http_status) {
plugins_call_handle_request_done(srv, con);
}
如果使用了ssl,关闭ssl连接:
#ifdef USE_OPENSSL
if (srv_sock->is_ssl) {
/* 关闭ssl连接 */
}
ERR_clear_error();
#endif
接着:
switch(con->mode) {
case DIRECT:
#if 0
log_error_write(srv, __FILE__, __LINE__,