comparison src/http/ngx_http_event.c @ 94:8220378432a8

nginx-0.0.1-2003-05-22-19:23:47 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 22 May 2003 15:23:47 +0000
parents 738fe44c70d5
children b48066122884
comparison
equal deleted inserted replaced
93:738fe44c70d5 94:8220378432a8
31 31
32 static void ngx_http_set_keepalive(ngx_http_request_t *r); 32 static void ngx_http_set_keepalive(ngx_http_request_t *r);
33 static void ngx_http_keepalive_handler(ngx_event_t *ev); 33 static void ngx_http_keepalive_handler(ngx_event_t *ev);
34 static void ngx_http_set_lingering_close(ngx_http_request_t *r); 34 static void ngx_http_set_lingering_close(ngx_http_request_t *r);
35 static void ngx_http_lingering_close_handler(ngx_event_t *ev); 35 static void ngx_http_lingering_close_handler(ngx_event_t *ev);
36 static void ngx_http_empty_handler(ngx_event_t *wev);
36 37
37 static void ngx_http_header_parse_error(ngx_http_request_t *r, int parse_err); 38 static void ngx_http_header_parse_error(ngx_http_request_t *r, int parse_err);
38 static size_t ngx_http_log_error(void *data, char *buf, size_t len); 39 static size_t ngx_http_log_error(void *data, char *buf, size_t len);
39 40
40 41
999 ngx_http_core_loc_conf_t *clcf; 1000 ngx_http_core_loc_conf_t *clcf;
1000 1001
1001 c = (ngx_connection_t *) r->connection; 1002 c = (ngx_connection_t *) r->connection;
1002 rev = c->read; 1003 rev = c->read;
1003 1004
1005 ngx_log_debug(c->log, "set http keepalive handler");
1006
1004 ctx = (ngx_http_log_ctx_t *) c->log->data; 1007 ctx = (ngx_http_log_ctx_t *) c->log->data;
1005 ctx->action = "closing request"; 1008 ctx->action = "closing request";
1006 ngx_http_close_request(r, 0); 1009 ngx_http_close_request(r, 0);
1007 1010
1008 if (rev->timer_set) { 1011 if (rev->timer_set) {
1059 1062
1060 h->pos = h->last = h->start; 1063 h->pos = h->last = h->start;
1061 rev->event_handler = ngx_http_keepalive_handler; 1064 rev->event_handler = ngx_http_keepalive_handler;
1062 wev = c->write; 1065 wev = c->write;
1063 1066
1064 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) { 1067 if (wev->active) {
1065 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) { 1068 if (ngx_event_flags & NGX_USE_LEVEL_EVENT) {
1066 ngx_http_close_connection(c); 1069 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
1067 return; 1070 ngx_http_close_connection(c);
1071 return;
1072 }
1073
1074 } else if ((ngx_event_flags & NGX_HAVE_AIO_EVENT) == 0) {
1075 wev->event_handler = ngx_http_empty_handler;
1068 } 1076 }
1069 } 1077 }
1070 1078
1071 ctx->action = "keepalive"; 1079 ctx->action = "keepalive";
1072 1080
1156 return; 1164 return;
1157 } 1165 }
1158 rev->blocked = 0; 1166 rev->blocked = 0;
1159 } 1167 }
1160 1168
1161 if (c->write->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) { 1169 if (c->write->active) {
1162 if (ngx_del_event(c->write, NGX_WRITE_EVENT, 0) == NGX_ERROR) { 1170 if (ngx_event_flags & NGX_USE_LEVEL_EVENT) {
1163 ngx_http_close_request(r, 0); 1171 if (ngx_del_event(c->write, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
1164 ngx_http_close_connection(c); 1172 ngx_http_close_request(r, 0);
1165 return; 1173 ngx_http_close_connection(c);
1174 return;
1175 }
1176
1177 } else if ((ngx_event_flags & NGX_HAVE_AIO_EVENT) == 0) {
1178 c->write->event_handler = ngx_http_empty_handler;
1166 } 1179 }
1167 } 1180 }
1168 1181
1169 if (ngx_shutdown_socket(c->fd, NGX_WRITE_SHUTDOWN) == -1) { 1182 if (ngx_shutdown_socket(c->fd, NGX_WRITE_SHUTDOWN) == -1) {
1170 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno, 1183 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
1257 1270
1258 return; 1271 return;
1259 } 1272 }
1260 1273
1261 1274
1275 static void ngx_http_empty_handler(ngx_event_t *wev)
1276 {
1277 ngx_log_debug(wev->log, "http empty handler");
1278
1279 return;
1280 }
1281
1282
1262 void ngx_http_close_request(ngx_http_request_t *r, int error) 1283 void ngx_http_close_request(ngx_http_request_t *r, int error)
1263 { 1284 {
1264 ngx_http_log_ctx_t *ctx; 1285 ngx_http_log_ctx_t *ctx;
1265 1286
1266 ngx_log_debug(r->connection->log, "close http request"); 1287 ngx_log_debug(r->connection->log, "close http request");
1304 if (c->read->timer_set) { 1325 if (c->read->timer_set) {
1305 ngx_del_timer(c->read); 1326 ngx_del_timer(c->read);
1306 c->read->timer_set = 0; 1327 c->read->timer_set = 0;
1307 } 1328 }
1308 1329
1309 if (c->read->active) {
1310 ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
1311 }
1312
1313 if (c->write->timer_set) { 1330 if (c->write->timer_set) {
1314 ngx_del_timer(c->write); 1331 ngx_del_timer(c->write);
1315 c->write->timer_set = 0; 1332 c->write->timer_set = 0;
1316 } 1333 }
1317 1334
1318 if (c->write->active) { 1335 if (1) {
1319 ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT); 1336 ngx_del_conn(c);
1337
1338 } else {
1339 if (c->read->active) {
1340 ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
1341 }
1342
1343 if (c->write->active) {
1344 ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
1345 }
1320 } 1346 }
1321 1347
1322 if (ngx_close_socket(c->fd) == -1) { 1348 if (ngx_close_socket(c->fd) == -1) {
1323 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno, 1349 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno,
1324 ngx_close_socket_n " failed"); 1350 ngx_close_socket_n " failed");