Mercurial > hg > nginx-quic
comparison src/event/ngx_event_accept.c @ 3812:ef27dc1a7832
fallback to accept() if accept4() is not implemented,
the issue has been introduced in r3787
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 02 Dec 2010 10:05:41 +0000 |
parents | 8a8eb335313d |
children | c870fb78550c |
comparison
equal
deleted
inserted
replaced
3811:4af1c7f53711 | 3812:ef27dc1a7832 |
---|---|
24 ngx_event_t *rev, *wev; | 24 ngx_event_t *rev, *wev; |
25 ngx_listening_t *ls; | 25 ngx_listening_t *ls; |
26 ngx_connection_t *c, *lc; | 26 ngx_connection_t *c, *lc; |
27 ngx_event_conf_t *ecf; | 27 ngx_event_conf_t *ecf; |
28 u_char sa[NGX_SOCKADDRLEN]; | 28 u_char sa[NGX_SOCKADDRLEN]; |
29 #if (NGX_HAVE_ACCEPT4) | |
30 static ngx_uint_t use_accept4 = 1; | |
31 #endif | |
29 | 32 |
30 ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module); | 33 ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module); |
31 | 34 |
32 if (ngx_event_flags & NGX_USE_RTSIG_EVENT) { | 35 if (ngx_event_flags & NGX_USE_RTSIG_EVENT) { |
33 ev->available = 1; | 36 ev->available = 1; |
45 | 48 |
46 do { | 49 do { |
47 socklen = NGX_SOCKADDRLEN; | 50 socklen = NGX_SOCKADDRLEN; |
48 | 51 |
49 #if (NGX_HAVE_ACCEPT4) | 52 #if (NGX_HAVE_ACCEPT4) |
50 s = accept4(lc->fd, (struct sockaddr *) sa, &socklen, SOCK_NONBLOCK); | 53 if (use_accept4) { |
54 s = accept4(lc->fd, (struct sockaddr *) sa, &socklen, | |
55 SOCK_NONBLOCK); | |
56 } else { | |
57 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); | |
58 } | |
51 #else | 59 #else |
52 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); | 60 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); |
53 #endif | 61 #endif |
54 | 62 |
55 if (s == -1) { | 63 if (s == -1) { |
61 return; | 69 return; |
62 } | 70 } |
63 | 71 |
64 ngx_log_error((ngx_uint_t) ((err == NGX_ECONNABORTED) ? | 72 ngx_log_error((ngx_uint_t) ((err == NGX_ECONNABORTED) ? |
65 NGX_LOG_ERR : NGX_LOG_ALERT), | 73 NGX_LOG_ERR : NGX_LOG_ALERT), |
66 ev->log, err, "accept() failed"); | 74 ev->log, err, |
75 #if !(NGX_HAVE_ACCEPT4) | |
76 "accept() failed"); | |
77 #else | |
78 use_accept4 ? "accept4() failed" : "accept() failed"); | |
79 | |
80 if (use_accept4 && err == NGX_ENOSYS) { | |
81 use_accept4 = 0; | |
82 ngx_inherited_nonblocking = 0; | |
83 continue; | |
84 } | |
85 #endif | |
67 | 86 |
68 if (err == NGX_ECONNABORTED) { | 87 if (err == NGX_ECONNABORTED) { |
69 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { | 88 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { |
70 ev->available--; | 89 ev->available--; |
71 } | 90 } |