comparison src/http/ngx_http_event.c @ 103:6dfda4cf5200

nginx-0.0.1-2003-06-11-19:28:34 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 11 Jun 2003 15:28:34 +0000
parents 2e069b6e6920
children 7db96f59bc29
comparison
equal deleted inserted replaced
102:7e86d028d8f0 103:6dfda4cf5200
65 { 65 {
66 int event; 66 int event;
67 ngx_event_t *rev; 67 ngx_event_t *rev;
68 ngx_http_log_ctx_t *lcx; 68 ngx_http_log_ctx_t *lcx;
69 69
70 c->addr_text.data = ngx_palloc(c->pool, c->addr_text_max_len); 70 c->addr_text.data = ngx_palloc(c->pool, c->listening->addr_text_max_len);
71 if (c->addr_text.data == NULL) { 71 if (c->addr_text.data == NULL) {
72 ngx_http_close_connection(c); 72 ngx_http_close_connection(c);
73 return; 73 return;
74 } 74 }
75 75
76 c->addr_text.len = ngx_sock_ntop(c->family, c->sockaddr, 76 c->addr_text.len = ngx_sock_ntop(c->listening->family, c->sockaddr,
77 c->addr_text.data, c->addr_text_max_len); 77 c->addr_text.data,
78 c->listening->addr_text_max_len);
78 if (c->addr_text.len == 0) { 79 if (c->addr_text.len == 0) {
79 ngx_http_close_connection(c); 80 ngx_http_close_connection(c);
80 return; 81 return;
81 } 82 }
82 83
98 /* deferred accept */ 99 /* deferred accept */
99 ngx_http_init_request(rev); 100 ngx_http_init_request(rev);
100 return; 101 return;
101 } 102 }
102 103
103 ngx_add_timer(rev, c->post_accept_timeout); 104 ngx_add_timer(rev, c->listening->post_accept_timeout);
104 rev->timer_set = 1; 105 rev->timer_set = 1;
105 106
106 if (ngx_event_flags & (NGX_HAVE_AIO_EVENT|NGX_HAVE_EDGE_EVENT)) { 107 if (ngx_event_flags & (NGX_HAVE_AIO_EVENT|NGX_HAVE_EDGE_EVENT)) {
107 /* aio, iocp, epoll */ 108 /* aio, iocp, epoll */
108 ngx_http_init_request(rev); 109 ngx_http_init_request(rev);
156 157
157 i = 0; 158 i = 0;
158 159
159 if (in_port->addrs.nelts > 1) { 160 if (in_port->addrs.nelts > 1) {
160 161
161 /* there're the several addresses on this port and one of them 162 /*
162 is "*:port" so getsockname() is needed to determine 163 * there're the several addresses on this port and one of them
163 the server address */ 164 * is "*:port" so getsockname() is needed to determine
164 165 * the server address.
165 /* TODO: AcceptEx() already gave this sockaddr_in */ 166 * AcceptEx() already gave this address.
166 167 */
167 len = sizeof(struct sockaddr_in); 168
168 if (getsockname(c->fd, (struct sockaddr *) &addr_in, &len) == -1) { 169 #if (WIN32)
169 ngx_log_error(NGX_LOG_CRIT, rev->log, ngx_socket_errno, 170 if (c->local_sockaddr) {
170 "getsockname() failed"); 171 r->in_addr =
171 ngx_http_close_connection(c); 172 ((struct sockaddr_in *) c->local_sockaddr)->sin_addr.s_addr;
172 return; 173
173 } 174 } else {
175 #endif
176 len = sizeof(struct sockaddr_in);
177 if (getsockname(c->fd, (struct sockaddr *) &addr_in, &len) == -1) {
178 ngx_log_error(NGX_LOG_CRIT, rev->log, ngx_socket_errno,
179 "getsockname() failed");
180 ngx_http_close_connection(c);
181 return;
182 }
183 #if (WIN32)
184 }
185 #endif
174 186
175 r->in_addr = addr_in.sin_addr.s_addr; 187 r->in_addr = addr_in.sin_addr.s_addr;
176 188
177 /* the last in_port->addrs address is "*" */ 189 /* the last in_port->addrs address is "*" */
178 190
687 int event; 699 int event;
688 ssize_t n; 700 ssize_t n;
689 ngx_event_t *rev; 701 ngx_event_t *rev;
690 ngx_http_core_srv_conf_t *cscf; 702 ngx_http_core_srv_conf_t *cscf;
691 703
704 rev = r->connection->read;
705
692 n = r->header_in->last - r->header_in->pos; 706 n = r->header_in->last - r->header_in->pos;
693 707
694 if (n > 0) { 708 if (n > 0) {
709 rev->ready = 0;
695 return n; 710 return n;
696 } 711 }
697 712
698 n = ngx_event_recv(r->connection, r->header_in->last, 713 n = ngx_recv(r->connection, r->header_in->last,
699 r->header_in->end - r->header_in->last); 714 r->header_in->end - r->header_in->last);
700 715
701 if (n == NGX_AGAIN) { 716 if (n == NGX_AGAIN) {
702 rev = r->connection->read;
703
704 if (!r->header_timeout_set) { 717 if (!r->header_timeout_set) {
705 if (rev->timer_set) { 718 if (rev->timer_set) {
706 ngx_del_timer(rev); 719 ngx_del_timer(rev);
707 } else { 720 } else {
708 rev->timer_set = 1; 721 rev->timer_set = 1;
771 ngx_del_timer(wev); 784 ngx_del_timer(wev);
772 wev->timer_set = 0; 785 wev->timer_set = 0;
773 } 786 }
774 787
775 rc = ngx_http_special_response_handler(r, rc); 788 rc = ngx_http_special_response_handler(r, rc);
789
790 if (rc == NGX_AGAIN) {
791 return;
792 }
793
794 if (rc == NGX_ERROR) {
795 ngx_http_close_request(r, 0);
796 ngx_http_close_connection(r->connection);
797 return;
798 }
799
800 } else if (rc == NGX_ERROR) {
801 r->keepalive = 0;
802 r->lingering_close = 0;
776 } 803 }
777 804
778 rev = r->connection->read; 805 rev = r->connection->read;
779 if (rev->timer_set) { 806 if (rev->timer_set) {
780 ngx_del_timer(rev); 807 ngx_del_timer(rev);
1026 size = r->headers_in.content_length_n; 1053 size = r->headers_in.content_length_n;
1027 if (size > clcf->discarded_buffer_size) { 1054 if (size > clcf->discarded_buffer_size) {
1028 size = clcf->discarded_buffer_size; 1055 size = clcf->discarded_buffer_size;
1029 } 1056 }
1030 1057
1031 n = ngx_event_recv(r->connection, r->discarded_buffer, size); 1058 n = ngx_recv(r->connection, r->discarded_buffer, size);
1032 if (n == NGX_ERROR) { 1059 if (n == NGX_ERROR) {
1033 return NGX_HTTP_BAD_REQUEST; 1060 return NGX_HTTP_BAD_REQUEST;
1034 } 1061 }
1035 1062
1036 if (n == NGX_AGAIN) { 1063 if (n == NGX_AGAIN) {
1167 /* MSIE closes a keepalive connection with RST flag 1194 /* MSIE closes a keepalive connection with RST flag
1168 so we ignore ECONNRESET here */ 1195 so we ignore ECONNRESET here */
1169 1196
1170 rev->ignore_econnreset = 1; 1197 rev->ignore_econnreset = 1;
1171 ngx_set_socket_errno(0); 1198 ngx_set_socket_errno(0);
1172 n = ngx_event_recv(c, c->buffer->last, c->buffer->end - c->buffer->last); 1199 n = ngx_recv(c, c->buffer->last, c->buffer->end - c->buffer->last);
1173 rev->ignore_econnreset = 0; 1200 rev->ignore_econnreset = 0;
1174 1201
1175 if (n == NGX_AGAIN) { 1202 if (n == NGX_AGAIN) {
1176 return; 1203 return;
1177 } 1204 }
1305 } 1332 }
1306 } 1333 }
1307 } 1334 }
1308 1335
1309 do { 1336 do {
1310 n = ngx_event_recv(c, r->discarded_buffer, clcf->discarded_buffer_size); 1337 n = ngx_recv(c, r->discarded_buffer, clcf->discarded_buffer_size);
1311 1338
1312 ngx_log_debug(c->log, "lingering read: %d" _ n); 1339 ngx_log_debug(c->log, "lingering read: %d" _ n);
1313 1340
1314 if (n == NGX_ERROR || n == 0) { 1341 if (n == NGX_ERROR || n == 0) {
1315 ngx_http_close_request(r, 0); 1342 ngx_http_close_request(r, 0);