comparison src/event/ngx_event_accept.c @ 448:76a79816b771 NGINX_0_7_36

nginx 0.7.36 *) Feature: a preliminary IPv6 support; the "listen" directive of the HTTP module supports IPv6. *) Bugfix: the $ancient_browser variable did not work for browsers preset by a "modern_browser" directives.
author Igor Sysoev <http://sysoev.ru>
date Sat, 21 Feb 2009 00:00:00 +0300
parents b246022ef454
children 549994537f15
comparison
equal deleted inserted replaced
447:40964c811e59 448:76a79816b771
5 5
6 6
7 #include <ngx_config.h> 7 #include <ngx_config.h>
8 #include <ngx_core.h> 8 #include <ngx_core.h>
9 #include <ngx_event.h> 9 #include <ngx_event.h>
10
11
12 /* the buffer size is enough to hold "struct sockaddr_un" */
13 #define NGX_SOCKLEN 512
14 10
15 11
16 static ngx_int_t ngx_enable_accept_events(ngx_cycle_t *cycle); 12 static ngx_int_t ngx_enable_accept_events(ngx_cycle_t *cycle);
17 static ngx_int_t ngx_disable_accept_events(ngx_cycle_t *cycle); 13 static ngx_int_t ngx_disable_accept_events(ngx_cycle_t *cycle);
18 static void ngx_close_accepted_connection(ngx_connection_t *c); 14 static void ngx_close_accepted_connection(ngx_connection_t *c);
27 ngx_socket_t s; 23 ngx_socket_t s;
28 ngx_event_t *rev, *wev; 24 ngx_event_t *rev, *wev;
29 ngx_listening_t *ls; 25 ngx_listening_t *ls;
30 ngx_connection_t *c, *lc; 26 ngx_connection_t *c, *lc;
31 ngx_event_conf_t *ecf; 27 ngx_event_conf_t *ecf;
32 char sa[NGX_SOCKLEN]; 28 u_char sa[NGX_SOCKADDRLEN];
33 29
34 ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module); 30 ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module);
35 31
36 if (ngx_event_flags & NGX_USE_RTSIG_EVENT) { 32 if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
37 ev->available = 1; 33 ev->available = 1;
46 42
47 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 43 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
48 "accept on %V, ready: %d", &ls->addr_text, ev->available); 44 "accept on %V, ready: %d", &ls->addr_text, ev->available);
49 45
50 do { 46 do {
51 socklen = NGX_SOCKLEN; 47 socklen = NGX_SOCKADDRLEN;
52 48
53 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); 49 s = accept(lc->fd, (struct sockaddr *) sa, &socklen);
54 50
55 if (s == -1) { 51 if (s == -1) {
56 err = ngx_socket_errno; 52 err = ngx_socket_errno;
151 c->send_chain = ngx_send_chain; 147 c->send_chain = ngx_send_chain;
152 148
153 c->log = log; 149 c->log = log;
154 c->pool->log = log; 150 c->pool->log = log;
155 151
152 c->socklen = socklen;
156 c->listening = ls; 153 c->listening = ls;
157 c->socklen = socklen; 154 c->local_sockaddr = ls->sockaddr;
155 c->local_socklen = ls->socklen;
158 156
159 c->unexpected_eof = 1; 157 c->unexpected_eof = 1;
160 158
161 rev = c->read; 159 rev = c->read;
162 wev = c->write; 160 wev = c->write;
206 ngx_close_accepted_connection(c); 204 ngx_close_accepted_connection(c);
207 return; 205 return;
208 } 206 }
209 207
210 c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data, 208 c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
211 ls->addr_text_max_len); 209 ls->addr_text_max_len, 0);
212 if (c->addr_text.len == 0) { 210 if (c->addr_text.len == 0) {
213 ngx_close_accepted_connection(c); 211 ngx_close_accepted_connection(c);
214 return; 212 return;
215 } 213 }
216 } 214 }