comparison src/event/ngx_event_accept.c @ 665:0b460e61bdcd default tip

Merge with nginx 1.0.0.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 25 Apr 2011 04:22:17 +0400
parents 3036c1836a24
children
comparison
equal deleted inserted replaced
572:06419a2298a9 665:0b460e61bdcd
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;
44 "accept on %V, ready: %d", &ls->addr_text, ev->available); 47 "accept on %V, ready: %d", &ls->addr_text, ev->available);
45 48
46 do { 49 do {
47 socklen = NGX_SOCKADDRLEN; 50 socklen = NGX_SOCKADDRLEN;
48 51
52 #if (NGX_HAVE_ACCEPT4)
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 }
59 #else
49 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); 60 s = accept(lc->fd, (struct sockaddr *) sa, &socklen);
61 #endif
50 62
51 if (s == -1) { 63 if (s == -1) {
52 err = ngx_socket_errno; 64 err = ngx_socket_errno;
53 65
54 if (err == NGX_EAGAIN) { 66 if (err == NGX_EAGAIN) {
55 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, err, 67 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, err,
56 "accept() not ready"); 68 "accept() not ready");
57 return; 69 return;
58 } 70 }
59 71
72 #if (NGX_HAVE_ACCEPT4)
73 ngx_log_error((ngx_uint_t) ((err == NGX_ECONNABORTED) ?
74 NGX_LOG_ERR : NGX_LOG_ALERT),
75 ev->log, err,
76 use_accept4 ? "accept4() failed" : "accept() failed");
77
78 if (use_accept4 && err == NGX_ENOSYS) {
79 use_accept4 = 0;
80 ngx_inherited_nonblocking = 0;
81 continue;
82 }
83 #else
60 ngx_log_error((ngx_uint_t) ((err == NGX_ECONNABORTED) ? 84 ngx_log_error((ngx_uint_t) ((err == NGX_ECONNABORTED) ?
61 NGX_LOG_ERR : NGX_LOG_ALERT), 85 NGX_LOG_ERR : NGX_LOG_ALERT),
62 ev->log, err, "accept() failed"); 86 ev->log, err, "accept() failed");
87 #endif
63 88
64 if (err == NGX_ECONNABORTED) { 89 if (err == NGX_ECONNABORTED) {
65 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { 90 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
66 ev->available--; 91 ev->available--;
67 } 92 }
150 c->pool->log = log; 175 c->pool->log = log;
151 176
152 c->socklen = socklen; 177 c->socklen = socklen;
153 c->listening = ls; 178 c->listening = ls;
154 c->local_sockaddr = ls->sockaddr; 179 c->local_sockaddr = ls->sockaddr;
155 c->local_socklen = ls->socklen;
156 180
157 c->unexpected_eof = 1; 181 c->unexpected_eof = 1;
182
183 #if (NGX_HAVE_UNIX_DOMAIN)
184 if (c->sockaddr->sa_family == AF_UNIX) {
185 c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
186 c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED;
187 #if (NGX_SOLARIS)
188 /* Solaris's sendfilev() supports AF_NCA, AF_INET, and AF_INET6 */
189 c->sendfile = 0;
190 #endif
191 }
192 #endif
158 193
159 rev = c->read; 194 rev = c->read;
160 wev = c->write; 195 wev = c->write;
161 196
162 wev->ready = 1; 197 wev->ready = 1;