annotate src/core/ngx_connection.c @ 4515:8bb695c05870 stable-1.0

Merge of r4498: Fix of rbtree lookup on hash collisions. Previous code incorrectly assumed that nodes with identical keys are linked together. This might not be true after tree rebalance. Patch by Lanshun Zhou.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 05 Mar 2012 13:17:56 +0000
parents 4919fb357a5d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4450
4919fb357a5d Merge of r4406, r4413: copyrights updated.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4243
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
6
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_event.h>
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
236
86e473b5641e nginx-0.0.1-2004-01-22-09:47:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 219
diff changeset
13 ngx_os_io_t ngx_io;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
16 static void ngx_drain_connections(void);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
17
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
18
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
19 ngx_listening_t *
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
20 ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
21 {
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
22 size_t len;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
23 ngx_listening_t *ls;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
24 struct sockaddr *sa;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
25 u_char text[NGX_SOCKADDR_STRLEN];
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
26
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
27 ls = ngx_array_push(&cf->cycle->listening);
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
28 if (ls == NULL) {
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
29 return NULL;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
30 }
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
31
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
32 ngx_memzero(ls, sizeof(ngx_listening_t));
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
33
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
34 sa = ngx_palloc(cf->pool, socklen);
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
35 if (sa == NULL) {
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
36 return NULL;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
37 }
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
38
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
39 ngx_memcpy(sa, sockaddr, socklen);
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
40
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
41 ls->sockaddr = sa;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
42 ls->socklen = socklen;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
43
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
44 len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
45 ls->addr_text.len = len;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
46
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
47 switch (ls->sockaddr->sa_family) {
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
48 #if (NGX_HAVE_INET6)
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
49 case AF_INET6:
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
50 ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
51 break;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
52 #endif
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
53 #if (NGX_HAVE_UNIX_DOMAIN)
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
54 case AF_UNIX:
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
55 ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
56 len++;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
57 break;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
58 #endif
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
59 case AF_INET:
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
60 ls->addr_text_max_len = NGX_INET_ADDRSTRLEN;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
61 break;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
62 default:
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
63 ls->addr_text_max_len = NGX_SOCKADDR_STRLEN;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
64 break;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
65 }
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
66
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
67 ls->addr_text.data = ngx_pnalloc(cf->pool, len);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
68 if (ls->addr_text.data == NULL) {
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
69 return NULL;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
70 }
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
71
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
72 ngx_memcpy(ls->addr_text.data, text, len);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
73
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
74 ls->fd = (ngx_socket_t) -1;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
75 ls->type = SOCK_STREAM;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
76
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
77 ls->backlog = NGX_LISTEN_BACKLOG;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
78 ls->rcvbuf = -1;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
79 ls->sndbuf = -1;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
80
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
81 #if (NGX_HAVE_SETFIB)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
82 ls->setfib = -1;
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
83 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
84
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
85 return ls;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
86 }
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
87
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
88
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
89 ngx_int_t
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
90 ngx_set_inherited_sockets(ngx_cycle_t *cycle)
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 {
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
92 size_t len;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
93 ngx_uint_t i;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
94 ngx_listening_t *ls;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
95 socklen_t olen;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
96 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
97 ngx_err_t err;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
98 struct accept_filter_arg af;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
99 #endif
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
100 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
101 int timeout;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
102 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
104 ls = cycle->listening.elts;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
105 for (i = 0; i < cycle->listening.nelts; i++) {
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
106
3537
d2848db4d98e fix IPv6 and Unix domain sockets inheritance while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3371
diff changeset
107 ls[i].sockaddr = ngx_palloc(cycle->pool, NGX_SOCKADDRLEN);
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
108 if (ls[i].sockaddr == NULL) {
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
109 return NGX_ERROR;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
110 }
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
111
3537
d2848db4d98e fix IPv6 and Unix domain sockets inheritance while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3371
diff changeset
112 ls[i].socklen = NGX_SOCKADDRLEN;
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
113 if (getsockname(ls[i].fd, ls[i].sockaddr, &ls[i].socklen) == -1) {
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
114 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno,
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
115 "getsockname() of the inherited "
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
116 "socket #%d failed", ls[i].fd);
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
117 ls[i].ignore = 1;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
121 switch (ls[i].sockaddr->sa_family) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
123 #if (NGX_HAVE_INET6)
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
124 case AF_INET6:
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
125 ls[i].addr_text_max_len = NGX_INET6_ADDRSTRLEN;
3292
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
126 len = NGX_INET6_ADDRSTRLEN + sizeof(":65535") - 1;
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
127 break;
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
128 #endif
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
129
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
130 #if (NGX_HAVE_UNIX_DOMAIN)
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
131 case AF_UNIX:
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
132 ls[i].addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
133 len = NGX_UNIX_ADDRSTRLEN;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
134 break;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
135 #endif
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
136
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
137 case AF_INET:
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
138 ls[i].addr_text_max_len = NGX_INET_ADDRSTRLEN;
3292
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
139 len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
140 break;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
141
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
142 default:
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
143 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno,
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
144 "the inherited socket #%d has "
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
145 "an unsupported protocol family", ls[i].fd);
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
146 ls[i].ignore = 1;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
147 continue;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
148 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
149
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
150 ls[i].addr_text.data = ngx_pnalloc(cycle->pool, len);
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
151 if (ls[i].addr_text.data == NULL) {
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
152 return NGX_ERROR;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
155 len = ngx_sock_ntop(ls[i].sockaddr, ls[i].addr_text.data, len, 1);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
156 if (len == 0) {
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
157 return NGX_ERROR;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
158 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
159
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
160 ls[i].addr_text.len = len;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
161
1377
0d57c150115b set default listen() backlog to 511 on all platforms except FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents: 1225
diff changeset
162 ls[i].backlog = NGX_LISTEN_BACKLOG;
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
163
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
164 olen = sizeof(int);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
165
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
166 if (getsockopt(ls[i].fd, SOL_SOCKET, SO_RCVBUF, (void *) &ls[i].rcvbuf,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
167 &olen)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
168 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
169 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
170 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
171 "getsockopt(SO_RCVBUF) %V failed, ignored",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
172 &ls[i].addr_text);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
173
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
174 ls[i].rcvbuf = -1;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
175 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
176
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
177 olen = sizeof(int);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
178
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
179 if (getsockopt(ls[i].fd, SOL_SOCKET, SO_SNDBUF, (void *) &ls[i].sndbuf,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
180 &olen)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
181 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
182 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
183 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
184 "getsockopt(SO_SNDBUF) %V failed, ignored",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
185 &ls[i].addr_text);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
186
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
187 ls[i].sndbuf = -1;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
188 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
189
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
190 #if 0
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
191 /* SO_SETFIB is currently a set only option */
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
192
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
193 #if (NGX_HAVE_SETFIB)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
194
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
195 if (getsockopt(ls[i].setfib, SOL_SOCKET, SO_SETFIB,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
196 (void *) &ls[i].setfib, &olen)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
197 == -1)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
198 {
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
199 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
200 "getsockopt(SO_SETFIB) %V failed, ignored",
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
201 &ls[i].addr_text);
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
202
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
203 ls[i].setfib = -1;
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
204 }
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
205
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
206 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
207 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
208
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
209 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
210
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
211 ngx_memzero(&af, sizeof(struct accept_filter_arg));
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
212 olen = sizeof(struct accept_filter_arg);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
213
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
214 if (getsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER, &af, &olen)
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
215 == -1)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
216 {
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
217 err = ngx_errno;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
218
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
219 if (err == NGX_EINVAL) {
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
220 continue;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
221 }
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
222
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
223 ngx_log_error(NGX_LOG_NOTICE, cycle->log, err,
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
224 "getsockopt(SO_ACCEPTFILTER) for %V failed, ignored",
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
225 &ls[i].addr_text);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
226 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
227 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
228
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
229 if (olen < sizeof(struct accept_filter_arg) || af.af_name[0] == '\0') {
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
230 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
231 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
232
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
233 ls[i].accept_filter = ngx_palloc(cycle->pool, 16);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
234 if (ls[i].accept_filter == NULL) {
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
235 return NGX_ERROR;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
236 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
237
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
238 (void) ngx_cpystrn((u_char *) ls[i].accept_filter,
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
239 (u_char *) af.af_name, 16);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
240 #endif
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
241
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
242 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
243
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
244 timeout = 0;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
245 olen = sizeof(int);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
246
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
247 if (getsockopt(ls[i].fd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &timeout, &olen)
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
248 == -1)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
249 {
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
250 ngx_log_error(NGX_LOG_NOTICE, cycle->log, ngx_errno,
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
251 "getsockopt(TCP_DEFER_ACCEPT) for %V failed, ignored",
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
252 &ls[i].addr_text);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
253 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
254 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
255
565
7c1369d37c7e nginx-0.3.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
256 if (olen < sizeof(int) || timeout == 0) {
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
257 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
258 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
259
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
260 ls[i].deferred_accept = 1;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
261 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 return NGX_OK;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
268 ngx_int_t
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
269 ngx_open_listening_sockets(ngx_cycle_t *cycle)
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
271 int reuseaddr;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
272 ngx_uint_t i, tries, failed;
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
273 ngx_err_t err;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
274 ngx_log_t *log;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
275 ngx_socket_t s;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
276 ngx_listening_t *ls;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 reuseaddr = 1;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 #if (NGX_SUPPRESS_WARN)
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 failed = 0;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 #endif
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 log = cycle->log;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
285 /* TODO: configurable try number */
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286
2024
7018254cc006 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1917
diff changeset
287 for (tries = 5; tries; tries--) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 failed = 0;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 /* for each listening socket */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 ls = cycle->listening.elts;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293 for (i = 0; i < cycle->listening.nelts; i++) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295 if (ls[i].ignore) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 if (ls[i].fd != -1) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 if (ls[i].inherited) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305 /* TODO: close on exit */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306 /* TODO: nonblocking */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307 /* TODO: deferred accept */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311
2198
5975975eedc0 ngx_sock_ntop() takes family from sockaddr, remove duplicate field
Igor Sysoev <igor@sysoev.ru>
parents: 2197
diff changeset
312 s = ngx_socket(ls[i].sockaddr->sa_family, ls[i].type, 0);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
314 if (s == -1) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
316 ngx_socket_n " %V failed", &ls[i].addr_text);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
320 if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
321 (const void *) &reuseaddr, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
322 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
323 {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
325 "setsockopt(SO_REUSEADDR) %V failed",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
326 &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
327
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
328 if (ngx_close_socket(s) == -1) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
329 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
330 ngx_close_socket_n " %V failed",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
331 &ls[i].addr_text);
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
332 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
333
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
334 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
335 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
336
2562
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
337 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
338
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
339 if (ls[i].sockaddr->sa_family == AF_INET6 && ls[i].ipv6only) {
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
340 int ipv6only;
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
341
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
342 ipv6only = (ls[i].ipv6only == 1);
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
343
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
344 if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
345 (const void *) &ipv6only, sizeof(int))
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
346 == -1)
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
347 {
2801
bceaaf5b055e use local variable
Igor Sysoev <igor@sysoev.ru>
parents: 2799
diff changeset
348 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
2562
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
349 "setsockopt(IPV6_V6ONLY) %V failed, ignored",
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
350 &ls[i].addr_text);
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
351 }
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
352 }
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
353 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354 /* TODO: close on exit */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356 if (!(ngx_event_flags & NGX_USE_AIO_EVENT)) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357 if (ngx_nonblocking(s) == -1) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
359 ngx_nonblocking_n " %V failed",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
360 &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
361
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
362 if (ngx_close_socket(s) == -1) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
363 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
364 ngx_close_socket_n " %V failed",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
365 &ls[i].addr_text);
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
366 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
367
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
368 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371
2801
bceaaf5b055e use local variable
Igor Sysoev <igor@sysoev.ru>
parents: 2799
diff changeset
372 ngx_log_debug2(NGX_LOG_DEBUG_CORE, log, 0,
593
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
373 "bind() %V #%d ", &ls[i].addr_text, s);
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
374
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
375 if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 err = ngx_socket_errno;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
377
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
378 if (err == NGX_EADDRINUSE && ngx_test_config) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
379 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
380 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
381
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 ngx_log_error(NGX_LOG_EMERG, log, err,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
383 "bind() to %V failed", &ls[i].addr_text);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
385 if (ngx_close_socket(s) == -1) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
387 ngx_close_socket_n " %V failed",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
388 &ls[i].addr_text);
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
389 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
391 if (err != NGX_EADDRINUSE) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
392 return NGX_ERROR;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
393 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
394
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 failed = 1;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
396
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399
3260
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
400 #if (NGX_HAVE_UNIX_DOMAIN)
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
401
3371
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
402 if (ls[i].sockaddr->sa_family == AF_UNIX) {
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
403 mode_t mode;
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
404 u_char *name;
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
405
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
406 name = ls[i].addr_text.data + sizeof("unix:") - 1;
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
407 mode = (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
3260
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
408
3371
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
409 if (chmod((char *) name, mode) == -1) {
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
410 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
411 "chmod() \"%s\" failed", name);
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
412 }
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
413
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
414 if (ngx_test_config) {
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
415 if (ngx_delete_file(name) == -1) {
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
416 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
417 ngx_delete_file_n " %s failed", name);
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
418 }
3260
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
419 }
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
420 }
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
421 #endif
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
422
1224
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
423 if (listen(s, ls[i].backlog) == -1) {
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
424 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
425 "listen() to %V, backlog %d failed",
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
426 &ls[i].addr_text, ls[i].backlog);
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
427
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
428 if (ngx_close_socket(s) == -1) {
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
429 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
430 ngx_close_socket_n " %V failed",
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
431 &ls[i].addr_text);
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
432 }
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
433
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
434 return NGX_ERROR;
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
435 }
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
436
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
437 ls[i].listen = 1;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
438
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
439 ls[i].fd = s;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
440 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
441
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
442 if (!failed) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
443 break;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
444 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
445
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
446 /* TODO: delay configurable */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
447
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
448 ngx_log_error(NGX_LOG_NOTICE, log, 0,
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449 "try again to bind() after 500ms");
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
450
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451 ngx_msleep(500);
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
453
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
454 if (failed) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
455 ngx_log_error(NGX_LOG_EMERG, log, 0, "still could not bind()");
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
456 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
457 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
458
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
459 return NGX_OK;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
460 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
462
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
463 void
2802
44b2081c015a use correct name
Igor Sysoev <igor@sysoev.ru>
parents: 2801
diff changeset
464 ngx_configure_listening_sockets(ngx_cycle_t *cycle)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
465 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
466 ngx_uint_t i;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
467 ngx_listening_t *ls;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
468
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
469 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
470 struct accept_filter_arg af;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
471 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
472 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
473 int timeout;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
474 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
475
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
476 ls = cycle->listening.elts;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
477 for (i = 0; i < cycle->listening.nelts; i++) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
478
2803
60758ab4e5f4 move listen log copying from ngx_open_listening_sockets()
Igor Sysoev <igor@sysoev.ru>
parents: 2802
diff changeset
479 ls[i].log = *ls[i].logp;
60758ab4e5f4 move listen log copying from ngx_open_listening_sockets()
Igor Sysoev <igor@sysoev.ru>
parents: 2802
diff changeset
480
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
481 if (ls[i].rcvbuf != -1) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
482 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_RCVBUF,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
483 (const void *) &ls[i].rcvbuf, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
484 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
485 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
486 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 565
diff changeset
487 "setsockopt(SO_RCVBUF, %d) %V failed, ignored",
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 565
diff changeset
488 ls[i].rcvbuf, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
489 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
490 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
491
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
492 if (ls[i].sndbuf != -1) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
493 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_SNDBUF,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
494 (const void *) &ls[i].sndbuf, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
495 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
496 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
497 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 565
diff changeset
498 "setsockopt(SO_SNDBUF, %d) %V failed, ignored",
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 565
diff changeset
499 ls[i].sndbuf, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
500 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
501 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
502
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
503 #if (NGX_HAVE_SETFIB)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
504 if (ls[i].setfib != -1) {
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
505 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_SETFIB,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
506 (const void *) &ls[i].setfib, sizeof(int))
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
507 == -1)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
508 {
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
509 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
510 "setsockopt(SO_SETFIB, %d) %V failed, ignored",
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
511 ls[i].setfib, &ls[i].addr_text);
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
512 }
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
513 }
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
514 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
515
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
516 #if 0
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
517 if (1) {
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
518 int tcp_nodelay = 1;
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
519
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
520 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_NODELAY,
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
521 (const void *) &tcp_nodelay, sizeof(int))
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
522 == -1)
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
523 {
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
524 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
525 "setsockopt(TCP_NODELAY) %V failed, ignored",
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
526 &ls[i].addr_text);
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
527 }
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
528 }
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
529 #endif
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
530
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
531 if (ls[i].listen) {
1225
8dfa34cb186e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1224
diff changeset
532
8dfa34cb186e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1224
diff changeset
533 /* change backlog via listen() */
8dfa34cb186e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1224
diff changeset
534
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
535 if (listen(ls[i].fd, ls[i].backlog) == -1) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
536 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
1222
d8d09f731c17 change wording
Igor Sysoev <igor@sysoev.ru>
parents: 1220
diff changeset
537 "listen() to %V, backlog %d failed, ignored",
d8d09f731c17 change wording
Igor Sysoev <igor@sysoev.ru>
parents: 1220
diff changeset
538 &ls[i].addr_text, ls[i].backlog);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
539 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
540 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
541
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
542 /*
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
543 * setting deferred mode should be last operation on socket,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
544 * because code may prematurely continue cycle on failure
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
545 */
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
546
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
547 #if (NGX_HAVE_DEFERRED_ACCEPT)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
548
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
549 #ifdef SO_ACCEPTFILTER
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
550
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
551 if (ls[i].delete_deferred) {
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
552 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
553 == -1)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
554 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
555 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
556 "setsockopt(SO_ACCEPTFILTER, NULL) "
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
557 "for %V failed, ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
558 &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
559
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
560 if (ls[i].accept_filter) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
561 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
562 "could not change the accept filter "
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
563 "to \"%s\" for %V, ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
564 ls[i].accept_filter, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
565 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
566
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
567 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
568 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
569
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
570 ls[i].deferred_accept = 0;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
571 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
572
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
573 if (ls[i].add_deferred) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
574 ngx_memzero(&af, sizeof(struct accept_filter_arg));
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
575 (void) ngx_cpystrn((u_char *) af.af_name,
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
576 (u_char *) ls[i].accept_filter, 16);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
577
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
578 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
579 &af, sizeof(struct accept_filter_arg))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
580 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
581 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
582 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
583 "setsockopt(SO_ACCEPTFILTER, \"%s\") "
4243
997651ba1871 Merging r4017:
Igor Sysoev <igor@sysoev.ru>
parents: 3880
diff changeset
584 "for %V failed, ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
585 ls[i].accept_filter, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
586 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
587 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
588
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
589 ls[i].deferred_accept = 1;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
590 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
591
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
592 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
593
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
594 #ifdef TCP_DEFER_ACCEPT
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
595
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
596 if (ls[i].add_deferred || ls[i].delete_deferred) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
597
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
598 if (ls[i].add_deferred) {
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
599 timeout = (int) (ls[i].post_accept_timeout / 1000);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
600
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
601 } else {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
602 timeout = 0;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
603 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
604
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
605 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_DEFER_ACCEPT,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
606 &timeout, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
607 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
608 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
609 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
610 "setsockopt(TCP_DEFER_ACCEPT, %d) for %V failed, "
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
611 "ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
612 timeout, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
613
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
614 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
615 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
616 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
617
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
618 if (ls[i].add_deferred) {
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
619 ls[i].deferred_accept = 1;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
620 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
621
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
622 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
623
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
624 #endif /* NGX_HAVE_DEFERRED_ACCEPT */
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
625 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
626
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
627 return;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
628 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
629
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
630
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
631 void
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
632 ngx_close_listening_sockets(ngx_cycle_t *cycle)
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
633 {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
634 ngx_uint_t i;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
635 ngx_listening_t *ls;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
636 ngx_connection_t *c;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
637
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
638 if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
639 return;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
640 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
641
303
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
642 ngx_accept_mutex_held = 0;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
643 ngx_use_accept_mutex = 0;
303
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
644
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
645 ls = cycle->listening.elts;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
646 for (i = 0; i < cycle->listening.nelts; i++) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
647
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
648 c = ls[i].connection;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
649
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
650 if (c) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
651 if (c->read->active) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
652 if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
653 ngx_del_conn(c, NGX_CLOSE_EVENT);
1833
86464f8eddd6 workaround for Linux 2.6 OpenVZ
Igor Sysoev <igor@sysoev.ru>
parents: 1435
diff changeset
654
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
655 } else if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
656
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
657 /*
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
658 * it seems that Linux-2.6.x OpenVZ sends events
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
659 * for closed shared listening sockets unless
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
660 * the events was explicity deleted
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
661 */
1833
86464f8eddd6 workaround for Linux 2.6 OpenVZ
Igor Sysoev <igor@sysoev.ru>
parents: 1435
diff changeset
662
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
663 ngx_del_event(c->read, NGX_READ_EVENT, 0);
1833
86464f8eddd6 workaround for Linux 2.6 OpenVZ
Igor Sysoev <igor@sysoev.ru>
parents: 1435
diff changeset
664
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
665 } else {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
666 ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
667 }
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
668 }
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
669
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
670 ngx_free_connection(c);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
671
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
672 c->fd = (ngx_socket_t) -1;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
673 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
674
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
675 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
676 "close listening %V #%d ", &ls[i].addr_text, ls[i].fd);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
677
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
678 if (ngx_close_socket(ls[i].fd) == -1) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
679 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
680 ngx_close_socket_n " %V failed", &ls[i].addr_text);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
681 }
2928
7b68caedea01 update r2925
Igor Sysoev <igor@sysoev.ru>
parents: 2854
diff changeset
682
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
683 #if (NGX_HAVE_UNIX_DOMAIN)
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
684
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
685 if (ls[i].sockaddr->sa_family == AF_UNIX
3358
f94e8ff65aa2 add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents: 3292
diff changeset
686 && ngx_process <= NGX_PROCESS_MASTER
3261
35077c22326c do not unlink unix domain socket file while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3260
diff changeset
687 && ngx_new_binary == 0)
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
688 {
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
689 u_char *name = ls[i].addr_text.data + sizeof("unix:") - 1;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
690
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
691 if (ngx_delete_file(name) == -1) {
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
692 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno,
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
693 ngx_delete_file_n " %s failed", name);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
694 }
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
695 }
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
696
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
697 #endif
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
698
2928
7b68caedea01 update r2925
Igor Sysoev <igor@sysoev.ru>
parents: 2854
diff changeset
699 ls[i].fd = (ngx_socket_t) -1;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
700 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
701 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
702
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
703
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
704 ngx_connection_t *
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
705 ngx_get_connection(ngx_socket_t s, ngx_log_t *log)
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
706 {
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
707 ngx_uint_t instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
708 ngx_event_t *rev, *wev;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
709 ngx_connection_t *c;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
710
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
711 /* disable warning: Win32 SOCKET is u_int while UNIX socket is int */
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
712
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
713 if (ngx_cycle->files && (ngx_uint_t) s >= ngx_cycle->files_n) {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
714 ngx_log_error(NGX_LOG_ALERT, log, 0,
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
715 "the new socket has number %d, "
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
716 "but only %ui files are available",
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
717 s, ngx_cycle->files_n);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
718 return NULL;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
719 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
720
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
721 /* ngx_mutex_lock */
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
722
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
723 c = ngx_cycle->free_connections;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
724
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
725 if (c == NULL) {
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
726 ngx_drain_connections();
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
727 c = ngx_cycle->free_connections;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
728 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
729
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
730 if (c == NULL) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
731 ngx_log_error(NGX_LOG_ALERT, log, 0,
2254
353dbe12845e fix grammar
Igor Sysoev <igor@sysoev.ru>
parents: 2198
diff changeset
732 "%ui worker_connections are not enough",
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
733 ngx_cycle->connection_n);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
734
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
735 /* ngx_mutex_unlock */
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
736
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
737 return NULL;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
738 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
739
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
740 ngx_cycle->free_connections = c->data;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
741 ngx_cycle->free_connection_n--;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
742
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
743 /* ngx_mutex_unlock */
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
744
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
745 if (ngx_cycle->files) {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
746 ngx_cycle->files[s] = c;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
747 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
748
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
749 rev = c->read;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
750 wev = c->write;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
751
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
752 ngx_memzero(c, sizeof(ngx_connection_t));
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
753
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
754 c->read = rev;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
755 c->write = wev;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
756 c->fd = s;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
757 c->log = log;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
758
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
759 instance = rev->instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
760
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
761 ngx_memzero(rev, sizeof(ngx_event_t));
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
762 ngx_memzero(wev, sizeof(ngx_event_t));
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
763
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
764 rev->instance = !instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
765 wev->instance = !instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
766
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
767 rev->index = NGX_INVALID_INDEX;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
768 wev->index = NGX_INVALID_INDEX;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
769
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
770 rev->data = c;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
771 wev->data = c;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
772
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
773 wev->write = 1;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
774
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
775 return c;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
776 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
777
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
778
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
779 void
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
780 ngx_free_connection(ngx_connection_t *c)
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
781 {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
782 /* ngx_mutex_lock */
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
783
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
784 c->data = ngx_cycle->free_connections;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
785 ngx_cycle->free_connections = c;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
786 ngx_cycle->free_connection_n++;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
787
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
788 /* ngx_mutex_unlock */
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
789
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
790 if (ngx_cycle->files) {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
791 ngx_cycle->files[c->fd] = NULL;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
792 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
793 }
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
794
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
795
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
796 void
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
797 ngx_close_connection(ngx_connection_t *c)
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
798 {
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
799 ngx_err_t err;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
800 ngx_uint_t log_error, level;
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
801 ngx_socket_t fd;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
802
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
803 if (c->fd == -1) {
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
804 ngx_log_error(NGX_LOG_ALERT, c->log, 0, "connection already closed");
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
805 return;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
806 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
807
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
808 if (c->read->timer_set) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
809 ngx_del_timer(c->read);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
810 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
811
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
812 if (c->write->timer_set) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
813 ngx_del_timer(c->write);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
814 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
815
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
816 if (ngx_del_conn) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
817 ngx_del_conn(c, NGX_CLOSE_EVENT);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
818
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
819 } else {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
820 if (c->read->active || c->read->disabled) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
821 ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
822 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
823
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
824 if (c->write->active || c->write->disabled) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
825 ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
826 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
827 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
828
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
829 #if (NGX_THREADS)
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
830
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
831 /*
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
832 * we have to clean the connection information before the closing
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
833 * because another thread may reopen the same file descriptor
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
834 * before we clean the connection
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
835 */
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
836
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
837 ngx_mutex_lock(ngx_posted_events_mutex);
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
838
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
839 if (c->read->prev) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
840 ngx_delete_posted_event(c->read);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
841 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
842
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
843 if (c->write->prev) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
844 ngx_delete_posted_event(c->write);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
845 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
846
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
847 c->read->closed = 1;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
848 c->write->closed = 1;
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
849
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
850 if (c->single_connection) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
851 ngx_unlock(&c->lock);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
852 c->read->locked = 0;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
853 c->write->locked = 0;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
854 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
855
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
856 ngx_mutex_unlock(ngx_posted_events_mutex);
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
857
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
858 #else
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
859
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
860 if (c->read->prev) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
861 ngx_delete_posted_event(c->read);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
862 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
863
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
864 if (c->write->prev) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
865 ngx_delete_posted_event(c->write);
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
866 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
867
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
868 c->read->closed = 1;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
869 c->write->closed = 1;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
870
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
871 #endif
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
872
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
873 ngx_reusable_connection(c, 0);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
874
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
875 log_error = c->log_error;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
876
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
877 ngx_free_connection(c);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
878
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
879 fd = c->fd;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
880 c->fd = (ngx_socket_t) -1;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
881
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
882 if (ngx_close_socket(fd) == -1) {
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
883
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
884 err = ngx_socket_errno;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
885
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
886 if (err == NGX_ECONNRESET || err == NGX_ENOTCONN) {
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
887
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
888 switch (log_error) {
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
889
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
890 case NGX_ERROR_INFO:
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
891 level = NGX_LOG_INFO;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
892 break;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
893
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
894 case NGX_ERROR_ERR:
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
895 level = NGX_LOG_ERR;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
896 break;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
897
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
898 default:
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
899 level = NGX_LOG_CRIT;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
900 }
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
901
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
902 } else {
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
903 level = NGX_LOG_CRIT;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
904 }
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
905
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
906 /* we use ngx_cycle->log because c->log was in c->pool */
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
907
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
908 ngx_log_error(level, ngx_cycle->log, err,
1435
0d37ad506bb6 log socket number
Igor Sysoev <igor@sysoev.ru>
parents: 1377
diff changeset
909 ngx_close_socket_n " %d failed", fd);
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
910 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
911 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
912
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
913
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
914 void
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
915 ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
916 {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
917 ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
918 "reusable connection: %ui", reusable);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
919
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
920 if (c->reusable) {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
921 ngx_queue_remove(&c->queue);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
922 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
923
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
924 c->reusable = reusable;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
925
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
926 if (reusable) {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
927 /* need cast as ngx_cycle is volatile */
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
928
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
929 ngx_queue_insert_head(
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
930 (ngx_queue_t *) &ngx_cycle->reusable_connections_queue, &c->queue);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
931 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
932 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
933
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
934
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
935 static void
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
936 ngx_drain_connections(void)
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
937 {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
938 ngx_int_t i;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
939 ngx_queue_t *q;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
940 ngx_connection_t *c;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
941
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
942 for (i = 0; i < 32; i++) {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
943 if (ngx_queue_empty(&ngx_cycle->reusable_connections_queue)) {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
944 break;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
945 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
946
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
947 q = ngx_queue_last(&ngx_cycle->reusable_connections_queue);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
948 c = ngx_queue_data(q, ngx_connection_t, queue);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
949
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
950 ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0,
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
951 "reusing connection");
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
952
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
953 c->close = 1;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
954 c->read->handler(c->read);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
955 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
956 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
957
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
958
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
959 ngx_int_t
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
960 ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
961 ngx_uint_t port)
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
962 {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
963 socklen_t len;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
964 ngx_uint_t addr;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
965 u_char sa[NGX_SOCKADDRLEN];
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
966 struct sockaddr_in *sin;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
967 #if (NGX_HAVE_INET6)
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
968 ngx_uint_t i;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
969 struct sockaddr_in6 *sin6;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
970 #endif
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
971
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
972 switch (c->local_sockaddr->sa_family) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
973
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
974 #if (NGX_HAVE_INET6)
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
975 case AF_INET6:
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
976 sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
977
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
978 for (addr = 0, i = 0; addr == 0 && i < 16; i++) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
979 addr |= sin6->sin6_addr.s6_addr[i];
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
980 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
981
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
982 break;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
983 #endif
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
984
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
985 default: /* AF_INET */
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
986 sin = (struct sockaddr_in *) c->local_sockaddr;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
987 addr = sin->sin_addr.s_addr;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
988 break;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
989 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
990
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
991 if (addr == 0) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
992
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
993 len = NGX_SOCKADDRLEN;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
994
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
995 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
996 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
997 return NGX_ERROR;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
998 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
999
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1000 c->local_sockaddr = ngx_palloc(c->pool, len);
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1001 if (c->local_sockaddr == NULL) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1002 return NGX_ERROR;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1003 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1004
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1005 ngx_memcpy(c->local_sockaddr, &sa, len);
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1006 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1007
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1008 if (s == NULL) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1009 return NGX_OK;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1010 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1011
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1012 s->len = ngx_sock_ntop(c->local_sockaddr, s->data, s->len, port);
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1013
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1014 return NGX_OK;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1015 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1016
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1017
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1018 ngx_int_t
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1019 ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1020 {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
1021 ngx_uint_t level;
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1022
2775
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1023 /* Winsock may return NGX_ECONNABORTED instead of NGX_ECONNRESET */
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1024
2775
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1025 if ((err == NGX_ECONNRESET
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1026 #if (NGX_WIN32)
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1027 || err == NGX_ECONNABORTED
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1028 #endif
2775
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1029 ) && c->log_error == NGX_ERROR_IGNORE_ECONNRESET)
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1030 {
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1031 return 0;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1032 }
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1033
2560
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1034 #if (NGX_SOLARIS)
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1035 if (err == NGX_EINVAL && c->log_error == NGX_ERROR_IGNORE_EINVAL) {
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1036 return 0;
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1037 }
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1038 #endif
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1039
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
1040 if (err == 0
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
1041 || err == NGX_ECONNRESET
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1042 #if (NGX_WIN32)
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1043 || err == NGX_ECONNABORTED
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1044 #else
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1045 || err == NGX_EPIPE
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1046 #endif
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 282
diff changeset
1047 || err == NGX_ENOTCONN
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1048 || err == NGX_ETIMEDOUT
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 282
diff changeset
1049 || err == NGX_ECONNREFUSED
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1833
diff changeset
1050 || err == NGX_ENETDOWN
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1833
diff changeset
1051 || err == NGX_ENETUNREACH
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1833
diff changeset
1052 || err == NGX_EHOSTDOWN
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 282
diff changeset
1053 || err == NGX_EHOSTUNREACH)
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1054 {
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
1055 switch (c->log_error) {
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1056
2560
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1057 case NGX_ERROR_IGNORE_EINVAL:
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
1058 case NGX_ERROR_IGNORE_ECONNRESET:
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1059 case NGX_ERROR_INFO:
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1060 level = NGX_LOG_INFO;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1061 break;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1062
3151
ad3ddfd06e7d low default connection errors level from alert to error
Igor Sysoev <igor@sysoev.ru>
parents: 2928
diff changeset
1063 default:
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1064 level = NGX_LOG_ERR;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1065 }
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1066
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1067 } else {
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1068 level = NGX_LOG_ALERT;
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1069 }
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1070
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1071 ngx_log_error(level, c->log, err, text);
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1072
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1073 return NGX_ERROR;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1074 }