Mercurial > hg > nginx
comparison src/event/ngx_event_accept.c @ 2512:2e91aecb9e57
a prelimiary IPv6 support, HTTP listen
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 21 Feb 2009 07:02:02 +0000 |
parents | fb7995c7bdd9 |
children | 53be1d485af9 |
comparison
equal
deleted
inserted
replaced
2511:f91c5c964e61 | 2512:2e91aecb9e57 |
---|---|
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 } |