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 }