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;