Mercurial > hg > nginx
comparison src/http/ngx_http_event.c @ 38:2ffaa35fba42
nginx-0.0.1-2002-12-24-10:09:57 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 24 Dec 2002 07:09:57 +0000 |
parents | 9fe40e51d4a3 |
children | 83fa61cd3d2f |
comparison
equal
deleted
inserted
replaced
37:9fe40e51d4a3 | 38:2ffaa35fba42 |
---|---|
693 r->connection->read->event_handler = ngx_http_lingering_close_handler; | 693 r->connection->read->event_handler = ngx_http_lingering_close_handler; |
694 | 694 |
695 ngx_del_timer(r->connection->read); | 695 ngx_del_timer(r->connection->read); |
696 ngx_add_timer(r->connection->read, r->server->lingering_timeout); | 696 ngx_add_timer(r->connection->read, r->server->lingering_timeout); |
697 | 697 |
698 if (r->connection->read->blocked) { | |
699 if (ngx_add_event(r->connection->read, NGX_READ_EVENT, | |
698 #if (HAVE_CLEAR_EVENT) | 700 #if (HAVE_CLEAR_EVENT) |
699 if (ngx_add_event(r->connection->read, NGX_READ_EVENT, | 701 NGX_CLEAR_EVENT) == NGX_ERROR) |
700 NGX_CLEAR_EVENT) == NGX_ERROR) { | |
701 #else | 702 #else |
702 if (ngx_add_event(r->connection->read, NGX_READ_EVENT, | 703 NGX_ONESHOT_EVENT) == NGX_ERROR) |
703 NGX_ONESHOT_EVENT) == NGX_ERROR) { | |
704 #endif | 704 #endif |
705 return ngx_http_close_request(r); | 705 { |
706 return ngx_http_close_request(r); | |
707 } | |
706 } | 708 } |
707 | 709 |
708 if (ngx_shutdown_socket(r->connection->fd, NGX_WRITE_SHUTDOWN) == -1) | 710 if (ngx_shutdown_socket(r->connection->fd, NGX_WRITE_SHUTDOWN) == -1) |
709 { | 711 { |
710 ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_socket_errno, | 712 ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_socket_errno, |
726 c = (ngx_connection_t *) ev->data; | 728 c = (ngx_connection_t *) ev->data; |
727 r = (ngx_http_request_t *) c->data; | 729 r = (ngx_http_request_t *) c->data; |
728 | 730 |
729 ngx_log_debug(ev->log, "http lingering close handler"); | 731 ngx_log_debug(ev->log, "http lingering close handler"); |
730 | 732 |
731 if (ev->timedout) | 733 if (ev->timedout) { |
732 return NGX_DONE; | 734 return ngx_http_close_request(r); |
735 } | |
733 | 736 |
734 timer = r->lingering_time - ngx_time(); | 737 timer = r->lingering_time - ngx_time(); |
735 if (timer <= 0) | 738 if (timer <= 0) { |
736 return NGX_DONE; | 739 return ngx_http_close_request(r); |
740 } | |
737 | 741 |
738 if (r->discarded_buffer == NULL) { | 742 if (r->discarded_buffer == NULL) { |
739 if (r->header_in->end - r->header_in->last.mem | 743 if (r->header_in->end - r->header_in->last.mem |
740 >= r->server->discarded_buffer_size) { | 744 >= r->server->discarded_buffer_size) { |
741 r->discarded_buffer = r->header_in->last.mem; | 745 r->discarded_buffer = r->header_in->last.mem; |
742 | 746 |
743 } else { | 747 } else { |
744 ngx_test_null(r->discarded_buffer, | 748 ngx_test_null(r->discarded_buffer, |
745 ngx_palloc(c->pool, r->server->discarded_buffer_size), | 749 ngx_palloc(c->pool, r->server->discarded_buffer_size), |
746 NGX_ERROR); | 750 ngx_http_close_request(r)); |
747 } | 751 } |
748 } | 752 } |
749 | 753 |
750 n = ngx_event_recv(c, r->discarded_buffer, | 754 n = ngx_event_recv(c, r->discarded_buffer, |
751 r->server->discarded_buffer_size); | 755 r->server->discarded_buffer_size); |
752 | 756 |
753 if (n == NGX_ERROR) | 757 ngx_log_debug(ev->log, "lingering read: %d" _ n); |
754 return NGX_ERROR; | 758 |
755 | 759 if (n == NGX_ERROR || n == 0) { |
756 if (n == 0) | 760 return ngx_http_close_request(r); |
757 return NGX_DONE; | 761 } |
758 | 762 |
759 timer *= 1000; | 763 timer *= 1000; |
760 if (timer > r->server->lingering_timeout) | 764 if (timer > r->server->lingering_timeout) { |
761 timer = r->server->lingering_timeout; | 765 timer = r->server->lingering_timeout; |
766 } | |
762 | 767 |
763 ngx_del_timer(ev); | 768 ngx_del_timer(ev); |
764 ngx_add_timer(ev, timer); | 769 ngx_add_timer(ev, timer); |
765 | 770 |
766 return NGX_OK; | 771 return NGX_OK; |