Mercurial > hg > nginx-quic
comparison src/event/ngx_event_accept.c @ 381:02a511569afb
nginx-0.0.7-2004-07-07-19:01:00 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 07 Jul 2004 15:01:00 +0000 |
parents | 5ce6561246a5 |
children | 6f3b20c1ac50 |
comparison
equal
deleted
inserted
replaced
380:5ce6561246a5 | 381:02a511569afb |
---|---|
14 static size_t ngx_accept_log_error(void *data, char *buf, size_t len); | 14 static size_t ngx_accept_log_error(void *data, char *buf, size_t len); |
15 | 15 |
16 | 16 |
17 void ngx_event_accept(ngx_event_t *ev) | 17 void ngx_event_accept(ngx_event_t *ev) |
18 { | 18 { |
19 ngx_uint_t instance, rinstance, winstance, accepted; | 19 ngx_uint_t instance, accepted; |
20 socklen_t len; | 20 socklen_t len; |
21 struct sockaddr *sa; | 21 struct sockaddr *sa; |
22 ngx_err_t err; | 22 ngx_err_t err; |
23 ngx_log_t *log; | 23 ngx_log_t *log; |
24 ngx_pool_t *pool; | 24 ngx_pool_t *pool; |
28 ngx_event_conf_t *ecf; | 28 ngx_event_conf_t *ecf; |
29 ngx_accept_log_ctx_t *ctx; | 29 ngx_accept_log_ctx_t *ctx; |
30 | 30 |
31 ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module); | 31 ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module); |
32 | 32 |
33 if (ngx_event_flags & (NGX_USE_EDGE_EVENT|NGX_USE_RTSIG_EVENT)) { | 33 if (ngx_event_flags & NGX_USE_RTSIG_EVENT) { |
34 ev->available = 1; | 34 ev->available = 1; |
35 | 35 |
36 } else if (!(ngx_event_flags & NGX_HAVE_KQUEUE_EVENT)) { | 36 } else if (!(ngx_event_flags & NGX_HAVE_KQUEUE_EVENT)) { |
37 ev->available = ecf->multi_accept; | 37 ev->available = ecf->multi_accept; |
38 } | 38 } |
92 s = accept(ls->fd, sa, &len); | 92 s = accept(ls->fd, sa, &len); |
93 if (s == -1) { | 93 if (s == -1) { |
94 err = ngx_socket_errno; | 94 err = ngx_socket_errno; |
95 | 95 |
96 if (err == NGX_EAGAIN) { | 96 if (err == NGX_EAGAIN) { |
97 if (!(ngx_event_flags | 97 if (!(ngx_event_flags & NGX_USE_RTSIG_EVENT)) |
98 & (NGX_USE_EDGE_EVENT|NGX_USE_RTSIG_EVENT))) | |
99 { | 98 { |
100 ngx_log_error(NGX_LOG_NOTICE, log, err, | 99 ngx_log_error(NGX_LOG_NOTICE, log, err, |
101 "EAGAIN after %d accepted connection(s)", | 100 "EAGAIN after %d accepted connection(s)", |
102 accepted); | 101 accepted); |
103 } | 102 } |
205 rev = &ngx_cycle->read_events[s]; | 204 rev = &ngx_cycle->read_events[s]; |
206 wev = &ngx_cycle->write_events[s]; | 205 wev = &ngx_cycle->write_events[s]; |
207 #endif | 206 #endif |
208 | 207 |
209 instance = rev->instance; | 208 instance = rev->instance; |
210 rinstance = rev->returned_instance; | |
211 winstance = wev->returned_instance; | |
212 | 209 |
213 #if (NGX_THREADS) | 210 #if (NGX_THREADS) |
214 | 211 |
215 if (*(&c->lock)) { | 212 if (*(&c->lock)) { |
216 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 213 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
229 | 226 |
230 c->listening = ls->listening; | 227 c->listening = ls->listening; |
231 c->sockaddr = sa; | 228 c->sockaddr = sa; |
232 c->socklen = len; | 229 c->socklen = len; |
233 | 230 |
234 if (ngx_event_flags & NGX_HAVE_INSTANCE_EVENT) { | 231 rev->instance = !instance; |
235 rev->use_instance = 1; | 232 wev->instance = !instance; |
236 rev->instance = (u_char) !instance; | |
237 rev->returned_instance = (u_char) rinstance; | |
238 | |
239 wev->use_instance = 1; | |
240 wev->instance = (u_char) !instance; | |
241 wev->returned_instance = (u_char) winstance; | |
242 } | |
243 | 233 |
244 rev->index = NGX_INVALID_INDEX; | 234 rev->index = NGX_INVALID_INDEX; |
245 wev->index = NGX_INVALID_INDEX; | 235 wev->index = NGX_INVALID_INDEX; |
246 | 236 |
247 rev->data = c; | 237 rev->data = c; |
254 c->unexpected_eof = 1; | 244 c->unexpected_eof = 1; |
255 | 245 |
256 wev->write = 1; | 246 wev->write = 1; |
257 wev->ready = 1; | 247 wev->ready = 1; |
258 | 248 |
259 if (ngx_event_flags | 249 if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_RTSIG_EVENT)) { |
260 & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT|NGX_USE_RTSIG_EVENT)) | |
261 { | |
262 /* epoll, rtsig, aio, iocp */ | 250 /* epoll, rtsig, aio, iocp */ |
263 rev->ready = 1; | 251 rev->ready = 1; |
264 } | 252 } |
265 | 253 |
266 if (ev->deferred_accept) { | 254 if (ev->deferred_accept) { |
267 rev->ready = 1; | 255 rev->ready = 1; |
268 } | |
269 | |
270 if (rev->ready) { | |
271 rev->returned_instance = rev->instance; | |
272 } | 256 } |
273 | 257 |
274 c->ctx = ls->ctx; | 258 c->ctx = ls->ctx; |
275 c->servers = ls->servers; | 259 c->servers = ls->servers; |
276 | 260 |
316 } | 300 } |
317 | 301 |
318 } | 302 } |
319 #endif | 303 #endif |
320 | 304 |
321 if (ngx_add_conn) { | 305 if (ngx_add_conn && (ngx_event_flags & NGX_USE_EPOLL_EVENT) == 0) { |
322 if (ngx_add_conn(c) == NGX_ERROR) { | 306 if (ngx_add_conn(c) == NGX_ERROR) { |
323 if (ngx_close_socket(s) == -1) { | 307 if (ngx_close_socket(s) == -1) { |
324 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno, | 308 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno, |
325 ngx_close_socket_n " failed"); | 309 ngx_close_socket_n " failed"); |
326 } | 310 } |