Mercurial > hg > nginx
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"); |