annotate src/core/ngx_connection.c @ 7281:bd6563e81cea

Limit req: improved handling of negative times. Negative times can appear since workers only update time on an event loop iteration start. If a worker was blocked for a long time during an event loop iteration, it is possible that another worker already updated the time stored in the node. As such, time since last update of the node (ms) will be negative. Previous code used ngx_abs(ms) in the calculations. That is, negative times were effectively treated as positive ones. As a result, it was not possible to maintain high request rates, where the same node can be updated multiple times from during an event loop iteration. In particular, this affected setups with many SSL handshakes, see http://mailman.nginx.org/pipermail/nginx/2018-May/056291.html. Fix is to only update the last update time stored in the node if the new time is larger than previously stored one. If a future time is stored in the node, we preserve this time as is. To prevent breaking things on platforms without monotonic time available if system time is updated backwards, a safety limit of 60 seconds is used. If the time stored in the node is more than 60 seconds in the future, we assume that the time was changed backwards and update lr->last to the current time.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 30 May 2018 15:40:34 +0300
parents 66aa2c1e82e6
children d27aa9060c95
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
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4323
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
6872
6ed0922d316b Added cycle parameter to ngx_drain_connections().
Maxim Dounin <mdounin@mdounin.ru>
parents: 6726
diff changeset
16 static void ngx_drain_connections(ngx_cycle_t *cycle);
3880
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 *
6555
090a78da4f88 Belatedly changed the ngx_create_listening() prototype.
Ruslan Ermilov <ru@nginx.com>
parents: 6474
diff changeset
20 ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr,
090a78da4f88 Belatedly changed the ngx_create_listening() prototype.
Ruslan Ermilov <ru@nginx.com>
parents: 6474
diff changeset
21 socklen_t socklen)
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
22 {
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
23 size_t len;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
24 ngx_listening_t *ls;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
25 struct sockaddr *sa;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
26 u_char text[NGX_SOCKADDR_STRLEN];
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
27
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
28 ls = ngx_array_push(&cf->cycle->listening);
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
29 if (ls == NULL) {
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
30 return NULL;
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
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
33 ngx_memzero(ls, sizeof(ngx_listening_t));
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
34
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
35 sa = ngx_palloc(cf->pool, socklen);
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
36 if (sa == NULL) {
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
37 return NULL;
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
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
40 ngx_memcpy(sa, sockaddr, socklen);
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
41
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
42 ls->sockaddr = sa;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
43 ls->socklen = socklen;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
44
5263
05ba5bce31e0 Core: extended ngx_sock_ntop() with socklen parameter.
Vladimir Homutov <vl@nginx.com>
parents: 5137
diff changeset
45 len = ngx_sock_ntop(sa, socklen, text, NGX_SOCKADDR_STRLEN, 1);
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
46 ls->addr_text.len = len;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
47
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
48 switch (ls->sockaddr->sa_family) {
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
49 #if (NGX_HAVE_INET6)
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
50 case AF_INET6:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
51 ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
52 break;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
53 #endif
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
54 #if (NGX_HAVE_UNIX_DOMAIN)
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
55 case AF_UNIX:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
56 ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
57 len++;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
58 break;
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
59 #endif
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
60 case AF_INET:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
61 ls->addr_text_max_len = NGX_INET_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
62 break;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
63 default:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
64 ls->addr_text_max_len = NGX_SOCKADDR_STRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
65 break;
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
66 }
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
67
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
68 ls->addr_text.data = ngx_pnalloc(cf->pool, len);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
69 if (ls->addr_text.data == NULL) {
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
70 return NULL;
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
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
73 ngx_memcpy(ls->addr_text.data, text, len);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
74
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
75 ls->fd = (ngx_socket_t) -1;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
76 ls->type = SOCK_STREAM;
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
77
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
78 ls->backlog = NGX_LISTEN_BACKLOG;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
79 ls->rcvbuf = -1;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
80 ls->sndbuf = -1;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
81
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
82 #if (NGX_HAVE_SETFIB)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
83 ls->setfib = -1;
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
84 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
85
5456
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
86 #if (NGX_HAVE_TCP_FASTOPEN)
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
87 ls->fastopen = -1;
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
88 #endif
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
89
2806
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
90 return ls;
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
91 }
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
92
a445bd4eb571 ngx_create_listening()
Igor Sysoev <igor@sysoev.ru>
parents: 2803
diff changeset
93
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
94 ngx_int_t
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
95 ngx_clone_listening(ngx_conf_t *cf, ngx_listening_t *ls)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
96 {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
97 #if (NGX_HAVE_REUSEPORT)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
98
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
99 ngx_int_t n;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
100 ngx_core_conf_t *ccf;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
101 ngx_listening_t ols;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
102
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
103 if (!ls->reuseport) {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
104 return NGX_OK;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
105 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
106
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
107 ols = *ls;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
108
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
109 ccf = (ngx_core_conf_t *) ngx_get_conf(cf->cycle->conf_ctx,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
110 ngx_core_module);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
111
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
112 for (n = 1; n < ccf->worker_processes; n++) {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
113
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
114 /* create a socket for each worker process */
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
115
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
116 ls = ngx_array_push(&cf->cycle->listening);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
117 if (ls == NULL) {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
118 return NGX_ERROR;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
119 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
120
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
121 *ls = ols;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
122 ls->worker = n;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
123 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
124
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
125 #endif
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
126
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
127 return NGX_OK;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
128 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
129
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
130
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
131 ngx_int_t
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
132 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
133 {
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
134 size_t len;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
135 ngx_uint_t i;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
136 ngx_listening_t *ls;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
137 socklen_t olen;
5550
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
138 #if (NGX_HAVE_DEFERRED_ACCEPT || NGX_HAVE_TCP_FASTOPEN)
5431
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
139 ngx_err_t err;
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
140 #endif
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
141 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
142 struct accept_filter_arg af;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
143 #endif
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
144 #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
145 int timeout;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
146 #endif
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
147 #if (NGX_HAVE_REUSEPORT)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
148 int reuseport;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
149 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
151 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
152 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
153
6559
adf25b8d0431 Introduced the ngx_sockaddr_t type.
Ruslan Ermilov <ru@nginx.com>
parents: 6555
diff changeset
154 ls[i].sockaddr = ngx_palloc(cycle->pool, sizeof(ngx_sockaddr_t));
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
155 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
156 return NGX_ERROR;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
157 }
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
158
6559
adf25b8d0431 Introduced the ngx_sockaddr_t type.
Ruslan Ermilov <ru@nginx.com>
parents: 6555
diff changeset
159 ls[i].socklen = sizeof(ngx_sockaddr_t);
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
160 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
161 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
162 "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
163 "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
164 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
165 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167
7119
fef61d26da39 Fixed buffer overread with unix sockets after accept().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7065
diff changeset
168 if (ls[i].socklen > (socklen_t) sizeof(ngx_sockaddr_t)) {
fef61d26da39 Fixed buffer overread with unix sockets after accept().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7065
diff changeset
169 ls[i].socklen = sizeof(ngx_sockaddr_t);
fef61d26da39 Fixed buffer overread with unix sockets after accept().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7065
diff changeset
170 }
fef61d26da39 Fixed buffer overread with unix sockets after accept().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7065
diff changeset
171
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
172 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
173
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
174 #if (NGX_HAVE_INET6)
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
175 case AF_INET6:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
176 ls[i].addr_text_max_len = NGX_INET6_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
177 len = NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
178 break;
3292
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
179 #endif
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
180
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
181 #if (NGX_HAVE_UNIX_DOMAIN)
6ed04ab2d062 allow to inherit unix domain sockets while online upgrade
Igor Sysoev <igor@sysoev.ru>
parents: 3263
diff changeset
182 case AF_UNIX:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
183 ls[i].addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
184 len = NGX_UNIX_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
185 break;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
186 #endif
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
187
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
188 case AF_INET:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
189 ls[i].addr_text_max_len = NGX_INET_ADDRSTRLEN;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
190 len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
Ruslan Ermilov <ru@nginx.com>
parents: 6462
diff changeset
191 break;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
192
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
193 default:
219
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
194 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
195 "the inherited socket #%d has "
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
196 "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
197 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
198 continue;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
199 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
200
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
201 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
202 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
203 return NGX_ERROR;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205
5263
05ba5bce31e0 Core: extended ngx_sock_ntop() with socklen parameter.
Vladimir Homutov <vl@nginx.com>
parents: 5137
diff changeset
206 len = ngx_sock_ntop(ls[i].sockaddr, ls[i].socklen,
05ba5bce31e0 Core: extended ngx_sock_ntop() with socklen parameter.
Vladimir Homutov <vl@nginx.com>
parents: 5137
diff changeset
207 ls[i].addr_text.data, len, 1);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
208 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
209 return NGX_ERROR;
f57597ec5249 nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
210 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
211
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2254
diff changeset
212 ls[i].addr_text.len = len;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
213
1377
0d57c150115b set default listen() backlog to 511 on all platforms except FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents: 1225
diff changeset
214 ls[i].backlog = NGX_LISTEN_BACKLOG;
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
215
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
216 olen = sizeof(int);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
217
6462
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
218 if (getsockopt(ls[i].fd, SOL_SOCKET, SO_TYPE, (void *) &ls[i].type,
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
219 &olen)
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
220 == -1)
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
221 {
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
222 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno,
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
223 "getsockopt(SO_TYPE) %V failed", &ls[i].addr_text);
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
224 ls[i].ignore = 1;
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
225 continue;
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
226 }
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
227
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
228 olen = sizeof(int);
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
229
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
230 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
231 &olen)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
232 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
233 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
234 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
235 "getsockopt(SO_RCVBUF) %V failed, ignored",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
236 &ls[i].addr_text);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
237
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
238 ls[i].rcvbuf = -1;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
239 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
240
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
241 olen = sizeof(int);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
242
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
243 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
244 &olen)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
245 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
246 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
247 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
248 "getsockopt(SO_SNDBUF) %V failed, ignored",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
249 &ls[i].addr_text);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
250
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
251 ls[i].sndbuf = -1;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
252 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
253
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
254 #if 0
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
255 /* SO_SETFIB is currently a set only option */
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
256
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
257 #if (NGX_HAVE_SETFIB)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
258
5488
c51b9491b0bd Fixed the first argument to getsockopt().
Ruslan Ermilov <ru@nginx.com>
parents: 5464
diff changeset
259 olen = sizeof(int);
c51b9491b0bd Fixed the first argument to getsockopt().
Ruslan Ermilov <ru@nginx.com>
parents: 5464
diff changeset
260
c51b9491b0bd Fixed the first argument to getsockopt().
Ruslan Ermilov <ru@nginx.com>
parents: 5464
diff changeset
261 if (getsockopt(ls[i].fd, SOL_SOCKET, SO_SETFIB,
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
262 (void *) &ls[i].setfib, &olen)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
263 == -1)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
264 {
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
265 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
266 "getsockopt(SO_SETFIB) %V failed, ignored",
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
267 &ls[i].addr_text);
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
268
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
269 ls[i].setfib = -1;
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
270 }
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
271
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
272 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
273 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
274
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
275 #if (NGX_HAVE_REUSEPORT)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
276
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
277 reuseport = 0;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
278 olen = sizeof(int);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
279
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
280 if (getsockopt(ls[i].fd, SOL_SOCKET, SO_REUSEPORT,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
281 (void *) &reuseport, &olen)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
282 == -1)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
283 {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
284 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
285 "getsockopt(SO_REUSEPORT) %V failed, ignored",
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
286 &ls[i].addr_text);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
287
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
288 } else {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
289 ls[i].reuseport = reuseport ? 1 : 0;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
290 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
291
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
292 #endif
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
293
6462
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
294 if (ls[i].type != SOCK_STREAM) {
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
295 continue;
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
296 }
fd4b52e74f96 Fixed socket inheritance on reload and binary upgrade.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
297
5456
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
298 #if (NGX_HAVE_TCP_FASTOPEN)
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
299
5488
c51b9491b0bd Fixed the first argument to getsockopt().
Ruslan Ermilov <ru@nginx.com>
parents: 5464
diff changeset
300 olen = sizeof(int);
c51b9491b0bd Fixed the first argument to getsockopt().
Ruslan Ermilov <ru@nginx.com>
parents: 5464
diff changeset
301
c51b9491b0bd Fixed the first argument to getsockopt().
Ruslan Ermilov <ru@nginx.com>
parents: 5464
diff changeset
302 if (getsockopt(ls[i].fd, IPPROTO_TCP, TCP_FASTOPEN,
5456
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
303 (void *) &ls[i].fastopen, &olen)
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
304 == -1)
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
305 {
5550
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
306 err = ngx_socket_errno;
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
307
7274
66aa2c1e82e6 Core: silenced getsockopt(TCP_FASTOPEN) messages on FreeBSD.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7119
diff changeset
308 if (err != NGX_EOPNOTSUPP && err != NGX_ENOPROTOOPT
66aa2c1e82e6 Core: silenced getsockopt(TCP_FASTOPEN) messages on FreeBSD.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7119
diff changeset
309 && err != NGX_EINVAL)
66aa2c1e82e6 Core: silenced getsockopt(TCP_FASTOPEN) messages on FreeBSD.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7119
diff changeset
310 {
5550
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
311 ngx_log_error(NGX_LOG_NOTICE, cycle->log, err,
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
312 "getsockopt(TCP_FASTOPEN) %V failed, ignored",
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
313 &ls[i].addr_text);
3c5ddf0575d8 Core: handle getsockopt(TCP_FASTOPEN) failures.
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
314 }
5456
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
315
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
316 ls[i].fastopen = -1;
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
317 }
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
318
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
319 #endif
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
320
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
321 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
322
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
323 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
324 olen = sizeof(struct accept_filter_arg);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
325
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
326 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
327 == -1)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
328 {
5557
188481078faf Use ngx_socket_errno where appropriate.
Piotr Sikora <piotr@cloudflare.com>
parents: 5550
diff changeset
329 err = ngx_socket_errno;
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
330
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
331 if (err == NGX_EINVAL) {
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
332 continue;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
333 }
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
334
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
335 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
336 "getsockopt(SO_ACCEPTFILTER) for %V failed, ignored",
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
337 &ls[i].addr_text);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
338 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
339 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
340
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
341 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
342 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
343 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
344
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
345 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
346 if (ls[i].accept_filter == NULL) {
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
347 return NGX_ERROR;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
348 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
349
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
350 (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
351 (u_char *) af.af_name, 16);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
352 #endif
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
353
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
354 #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
355
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
356 timeout = 0;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
357 olen = sizeof(int);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
358
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
359 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
360 == -1)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
361 {
5557
188481078faf Use ngx_socket_errno where appropriate.
Piotr Sikora <piotr@cloudflare.com>
parents: 5550
diff changeset
362 err = ngx_socket_errno;
5431
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
363
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
364 if (err == NGX_EOPNOTSUPP) {
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
365 continue;
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
366 }
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
367
91bd62a9627e Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5360
diff changeset
368 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
369 "getsockopt(TCP_DEFER_ACCEPT) for %V failed, ignored",
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
370 &ls[i].addr_text);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
371 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
372 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
373
565
7c1369d37c7e nginx-0.3.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
374 if (olen < sizeof(int) || timeout == 0) {
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
375 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
376 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
377
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
378 ls[i].deferred_accept = 1;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
379 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 return NGX_OK;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
386 ngx_int_t
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
387 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
388 {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
389 int reuseaddr;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
390 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
391 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
392 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
393 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
394 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
395
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 reuseaddr = 1;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397 #if (NGX_SUPPRESS_WARN)
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 failed = 0;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399 #endif
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
400
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401 log = cycle->log;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
402
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
403 /* 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
404
2024
7018254cc006 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1917
diff changeset
405 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
406 failed = 0;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
407
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
408 /* for each listening socket */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
409
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410 ls = cycle->listening.elts;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
411 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
412
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413 if (ls[i].ignore) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
416
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
417 #if (NGX_HAVE_REUSEPORT)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
418
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
419 if (ls[i].add_reuseport) {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
420
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
421 /*
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
422 * to allow transition from a socket without SO_REUSEPORT
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
423 * to multiple sockets with SO_REUSEPORT, we have to set
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
424 * SO_REUSEPORT on the old socket before opening new ones
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
425 */
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
426
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
427 int reuseport = 1;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
428
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
429 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_REUSEPORT,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
430 (const void *) &reuseport, sizeof(int))
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
431 == -1)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
432 {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
433 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
434 "setsockopt(SO_REUSEPORT) %V failed, ignored",
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
435 &ls[i].addr_text);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
436 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
437
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
438 ls[i].add_reuseport = 0;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
439 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
440 #endif
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
441
5360
3d2d3e1cf427 Win32: MinGW GCC compatibility.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5283
diff changeset
442 if (ls[i].fd != (ngx_socket_t) -1) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
443 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
444 }
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 if (ls[i].inherited) {
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 /* TODO: close on exit */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449 /* TODO: nonblocking */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
450 /* TODO: deferred accept */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452 continue;
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
2198
5975975eedc0 ngx_sock_ntop() takes family from sockaddr, remove duplicate field
Igor Sysoev <igor@sysoev.ru>
parents: 2197
diff changeset
455 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
456
5360
3d2d3e1cf427 Win32: MinGW GCC compatibility.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5283
diff changeset
457 if (s == (ngx_socket_t) -1) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
458 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
459 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
460 return NGX_ERROR;
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
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
463 if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
464 (const void *) &reuseaddr, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
465 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
466 {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
467 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
468 "setsockopt(SO_REUSEADDR) %V failed",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
469 &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
470
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
471 if (ngx_close_socket(s) == -1) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
472 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
473 ngx_close_socket_n " %V failed",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
474 &ls[i].addr_text);
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
475 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
476
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
477 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
478 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
480 #if (NGX_HAVE_REUSEPORT)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
481
7064
ecb5cd305b06 Core: disabled SO_REUSEPORT when testing config (ticket #1300).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
482 if (ls[i].reuseport && !ngx_test_config) {
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
483 int reuseport;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
484
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
485 reuseport = 1;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
486
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
487 if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
488 (const void *) &reuseport, sizeof(int))
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
489 == -1)
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
490 {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
491 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
7065
c0d89f602d08 Core: fixed error message on setsockopt(SO_REUSEPORT) failure.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7064
diff changeset
492 "setsockopt(SO_REUSEPORT) %V failed",
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
493 &ls[i].addr_text);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
494
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
495 if (ngx_close_socket(s) == -1) {
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
496 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
497 ngx_close_socket_n " %V failed",
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
498 &ls[i].addr_text);
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
499 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
500
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
501 return NGX_ERROR;
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
502 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
503 }
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
504 #endif
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6126
diff changeset
505
2562
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
506 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
507
4771
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4572
diff changeset
508 if (ls[i].sockaddr->sa_family == AF_INET6) {
2562
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
509 int ipv6only;
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
510
4771
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4572
diff changeset
511 ipv6only = ls[i].ipv6only;
2562
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
512
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
513 if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
514 (const void *) &ipv6only, sizeof(int))
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
515 == -1)
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
516 {
2801
bceaaf5b055e use local variable
Igor Sysoev <igor@sysoev.ru>
parents: 2799
diff changeset
517 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
2562
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
518 "setsockopt(IPV6_V6ONLY) %V failed, ignored",
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
519 &ls[i].addr_text);
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
520 }
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
521 }
c352c419be85 ipv6only
Igor Sysoev <igor@sysoev.ru>
parents: 2560
diff changeset
522 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
523 /* TODO: close on exit */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
524
6125
4dc8e7b62216 Removed the obsolete aio module.
Ruslan Ermilov <ru@nginx.com>
parents: 6038
diff changeset
525 if (!(ngx_event_flags & NGX_USE_IOCP_EVENT)) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
526 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
527 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
528 ngx_nonblocking_n " %V failed",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
529 &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
530
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
531 if (ngx_close_socket(s) == -1) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
532 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
533 ngx_close_socket_n " %V failed",
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
534 &ls[i].addr_text);
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
535 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
536
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
537 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
539 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
540
2801
bceaaf5b055e use local variable
Igor Sysoev <igor@sysoev.ru>
parents: 2799
diff changeset
541 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
542 "bind() %V #%d ", &ls[i].addr_text, s);
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
543
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
544 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
545 err = ngx_socket_errno;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
546
5740
4440438eb086 Core: plugged socket leak during configuration test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5583
diff changeset
547 if (err != NGX_EADDRINUSE || !ngx_test_config) {
4440438eb086 Core: plugged socket leak during configuration test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5583
diff changeset
548 ngx_log_error(NGX_LOG_EMERG, log, err,
4440438eb086 Core: plugged socket leak during configuration test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5583
diff changeset
549 "bind() to %V failed", &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
550 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
551
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
552 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
553 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
554 ngx_close_socket_n " %V failed",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
555 &ls[i].addr_text);
1223
8523f4da2d69 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1222
diff changeset
556 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
557
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
558 if (err != NGX_EADDRINUSE) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
559 return NGX_ERROR;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
560 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
561
5740
4440438eb086 Core: plugged socket leak during configuration test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5583
diff changeset
562 if (!ngx_test_config) {
4440438eb086 Core: plugged socket leak during configuration test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5583
diff changeset
563 failed = 1;
4440438eb086 Core: plugged socket leak during configuration test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5583
diff changeset
564 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
565
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
566 continue;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
568
3260
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
569 #if (NGX_HAVE_UNIX_DOMAIN)
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
570
3371
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
571 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
572 mode_t mode;
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
573 u_char *name;
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
574
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
575 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
576 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
577
3371
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
578 if (chmod((char *) name, mode) == -1) {
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
579 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
580 "chmod() \"%s\" failed", name);
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
581 }
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
582
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
583 if (ngx_test_config) {
5137
f941cf265cc5 Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents: 5115
diff changeset
584 if (ngx_delete_file(name) == NGX_FILE_ERROR) {
3371
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
585 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
586 ngx_delete_file_n " %s failed", name);
102fdc22de4d chmod unix listen domain socket to 0666
Igor Sysoev <igor@sysoev.ru>
parents: 3358
diff changeset
587 }
3260
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
588 }
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
589 }
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
590 #endif
a6df0624203c unlink unix domain socket file after testing
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
591
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
592 if (ls[i].type != SOCK_STREAM) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
593 ls[i].fd = s;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
594 continue;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
595 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
596
1224
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
597 if (listen(s, ls[i].backlog) == -1) {
6218
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
598 err = ngx_socket_errno;
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
599
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
600 /*
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
601 * on OpenVZ after suspend/resume EADDRINUSE
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
602 * may be returned by listen() instead of bind(), see
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
603 * https://bugzilla.openvz.org/show_bug.cgi?id=2470
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
604 */
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
605
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
606 if (err != NGX_EADDRINUSE || !ngx_test_config) {
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
607 ngx_log_error(NGX_LOG_EMERG, log, err,
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
608 "listen() to %V, backlog %d failed",
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
609 &ls[i].addr_text, ls[i].backlog);
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
610 }
1224
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
611
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
612 if (ngx_close_socket(s) == -1) {
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
613 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
614 ngx_close_socket_n " %V failed",
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
615 &ls[i].addr_text);
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
616 }
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
617
6218
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
618 if (err != NGX_EADDRINUSE) {
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
619 return NGX_ERROR;
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
620 }
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
621
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
622 if (!ngx_test_config) {
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
623 failed = 1;
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
624 }
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
625
3096ae76ba47 Workaround for "configuration file test failed" under OpenVZ.
Gena Makhomed <gmm@csdoc.com>
parents: 6153
diff changeset
626 continue;
1224
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
627 }
53e3dd035140 do listen() just after bind() to exit early
Igor Sysoev <igor@sysoev.ru>
parents: 1223
diff changeset
628
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
629 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
630
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631 ls[i].fd = s;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
632 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
633
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
634 if (!failed) {
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
635 break;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
636 }
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 /* TODO: delay configurable */
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
639
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
640 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
641 "try again to bind() after 500ms");
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
642
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
643 ngx_msleep(500);
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
644 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
645
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
646 if (failed) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
647 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
648 return NGX_ERROR;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
649 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
650
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
651 return NGX_OK;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
652 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
653
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
654
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
655 void
2802
44b2081c015a use correct name
Igor Sysoev <igor@sysoev.ru>
parents: 2801
diff changeset
656 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
657 {
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
658 int value;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
659 ngx_uint_t i;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
660 ngx_listening_t *ls;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
661
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
662 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
663 struct accept_filter_arg af;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
664 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
665
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
666 ls = cycle->listening.elts;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
667 for (i = 0; i < cycle->listening.nelts; i++) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
668
2803
60758ab4e5f4 move listen log copying from ngx_open_listening_sockets()
Igor Sysoev <igor@sysoev.ru>
parents: 2802
diff changeset
669 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
670
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
671 if (ls[i].rcvbuf != -1) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
672 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
673 (const void *) &ls[i].rcvbuf, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
674 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
675 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
676 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
677 "setsockopt(SO_RCVBUF, %d) %V failed, ignored",
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 565
diff changeset
678 ls[i].rcvbuf, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
679 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
680 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
681
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
682 if (ls[i].sndbuf != -1) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
683 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
684 (const void *) &ls[i].sndbuf, sizeof(int))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
685 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
686 {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
687 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
688 "setsockopt(SO_SNDBUF, %d) %V failed, ignored",
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 565
diff changeset
689 ls[i].sndbuf, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
690 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
691 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
692
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
693 if (ls[i].keepalive) {
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
694 value = (ls[i].keepalive == 1) ? 1 : 0;
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
695
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
696 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_KEEPALIVE,
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
697 (const void *) &value, sizeof(int))
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
698 == -1)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
699 {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
700 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
701 "setsockopt(SO_KEEPALIVE, %d) %V failed, ignored",
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
702 value, &ls[i].addr_text);
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
703 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
704 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
705
4522
14411ee4d89f Whitespace fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
706 #if (NGX_HAVE_KEEPALIVE_TUNABLE)
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
707
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
708 if (ls[i].keepidle) {
5283
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
709 value = ls[i].keepidle;
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
710
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
711 #if (NGX_KEEPALIVE_FACTOR)
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
712 value *= NGX_KEEPALIVE_FACTOR;
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
713 #endif
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
714
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
715 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPIDLE,
5283
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
716 (const void *) &value, sizeof(int))
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
717 == -1)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
718 {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
719 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
720 "setsockopt(TCP_KEEPIDLE, %d) %V failed, ignored",
5283
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
721 value, &ls[i].addr_text);
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
722 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
723 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
724
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
725 if (ls[i].keepintvl) {
5283
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
726 value = ls[i].keepintvl;
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
727
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
728 #if (NGX_KEEPALIVE_FACTOR)
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
729 value *= NGX_KEEPALIVE_FACTOR;
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
730 #endif
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
731
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
732 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPINTVL,
5283
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
733 (const void *) &value, sizeof(int))
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
734 == -1)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
735 {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
736 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
737 "setsockopt(TCP_KEEPINTVL, %d) %V failed, ignored",
5283
6d73e0dc4f64 On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov <ru@nginx.com>
parents: 5282
diff changeset
738 value, &ls[i].addr_text);
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
739 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
740 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
741
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
742 if (ls[i].keepcnt) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
743 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPCNT,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
744 (const void *) &ls[i].keepcnt, sizeof(int))
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
745 == -1)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
746 {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
747 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
748 "setsockopt(TCP_KEEPCNT, %d) %V failed, ignored",
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
749 ls[i].keepcnt, &ls[i].addr_text);
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
750 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
751 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
752
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
753 #endif
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4016
diff changeset
754
3676
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
755 #if (NGX_HAVE_SETFIB)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
756 if (ls[i].setfib != -1) {
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
757 if (setsockopt(ls[i].fd, SOL_SOCKET, SO_SETFIB,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
758 (const void *) &ls[i].setfib, sizeof(int))
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
759 == -1)
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
760 {
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
761 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
762 "setsockopt(SO_SETFIB, %d) %V failed, ignored",
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
763 ls[i].setfib, &ls[i].addr_text);
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
764 }
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
765 }
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
766 #endif
4430d110293e listen setfib=X
Igor Sysoev <igor@sysoev.ru>
parents: 3537
diff changeset
767
5456
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
768 #if (NGX_HAVE_TCP_FASTOPEN)
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
769 if (ls[i].fastopen != -1) {
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
770 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_FASTOPEN,
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
771 (const void *) &ls[i].fastopen, sizeof(int))
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
772 == -1)
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
773 {
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
774 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
775 "setsockopt(TCP_FASTOPEN, %d) %V failed, ignored",
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
776 ls[i].fastopen, &ls[i].addr_text);
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
777 }
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
778 }
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
779 #endif
692afcea9d0d Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
Mathew Rodley <mathew@rodley.com.au>
parents: 5431
diff changeset
780
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
781 #if 0
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
782 if (1) {
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
783 int tcp_nodelay = 1;
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
784
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
785 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
786 (const void *) &tcp_nodelay, sizeof(int))
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
787 == -1)
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
788 {
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
789 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
790 "setsockopt(TCP_NODELAY) %V failed, ignored",
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
791 &ls[i].addr_text);
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
792 }
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
793 }
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
794 #endif
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
795
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
796 if (ls[i].listen) {
1225
8dfa34cb186e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1224
diff changeset
797
8dfa34cb186e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1224
diff changeset
798 /* change backlog via listen() */
8dfa34cb186e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1224
diff changeset
799
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
800 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
801 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
1222
d8d09f731c17 change wording
Igor Sysoev <igor@sysoev.ru>
parents: 1220
diff changeset
802 "listen() to %V, backlog %d failed, ignored",
d8d09f731c17 change wording
Igor Sysoev <igor@sysoev.ru>
parents: 1220
diff changeset
803 &ls[i].addr_text, ls[i].backlog);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
804 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
805 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
806
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
807 /*
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
808 * 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
809 * because code may prematurely continue cycle on failure
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
810 */
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
811
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
812 #if (NGX_HAVE_DEFERRED_ACCEPT)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
813
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
814 #ifdef SO_ACCEPTFILTER
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
815
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
816 if (ls[i].delete_deferred) {
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
817 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
818 == -1)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
819 {
5557
188481078faf Use ngx_socket_errno where appropriate.
Piotr Sikora <piotr@cloudflare.com>
parents: 5550
diff changeset
820 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
821 "setsockopt(SO_ACCEPTFILTER, NULL) "
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
822 "for %V failed, ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
823 &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
824
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
825 if (ls[i].accept_filter) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
826 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
827 "could not change the accept filter "
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
828 "to \"%s\" for %V, ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
829 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
830 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
831
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
832 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
833 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
834
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
835 ls[i].deferred_accept = 0;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
836 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
837
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
838 if (ls[i].add_deferred) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
839 ngx_memzero(&af, sizeof(struct accept_filter_arg));
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
840 (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
841 (u_char *) ls[i].accept_filter, 16);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
842
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
843 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
844 &af, sizeof(struct accept_filter_arg))
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
845 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
846 {
5557
188481078faf Use ngx_socket_errno where appropriate.
Piotr Sikora <piotr@cloudflare.com>
parents: 5550
diff changeset
847 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
848 "setsockopt(SO_ACCEPTFILTER, \"%s\") "
4016
b044d6553d52 Move SO_ACCEPTFILTER and TCP_DEFER_ACCEPT checks into configure.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3880
diff changeset
849 "for %V failed, ignored",
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
850 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
851 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
852 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
853
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
854 ls[i].deferred_accept = 1;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
855 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
856
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
857 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
858
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
859 #ifdef TCP_DEFER_ACCEPT
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
860
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
861 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
862
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
863 if (ls[i].add_deferred) {
5541
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
864 /*
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
865 * There is no way to find out how long a connection was
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
866 * in queue (and a connection may bypass deferred queue at all
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
867 * if syncookies were used), hence we use 1 second timeout
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
868 * here.
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
869 */
fdb67cfc957d Fixed TCP_DEFER_ACCEPT handling (ticket #353).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5488
diff changeset
870 value = 1;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
871
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
872 } else {
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
873 value = 0;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
874 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
875
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
876 if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_DEFER_ACCEPT,
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
877 &value, sizeof(int))
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
878 == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
879 {
5557
188481078faf Use ngx_socket_errno where appropriate.
Piotr Sikora <piotr@cloudflare.com>
parents: 5550
diff changeset
880 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
881 "setsockopt(TCP_DEFER_ACCEPT, %d) for %V failed, "
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
882 "ignored",
5282
31690d934175 Style: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov <ru@nginx.com>
parents: 5264
diff changeset
883 value, &ls[i].addr_text);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
884
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
885 continue;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
886 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
887 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
888
627
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
889 if (ls[i].add_deferred) {
387450de0b4d nginx-0.3.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
890 ls[i].deferred_accept = 1;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
891 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
892
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
893 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
894
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
895 #endif /* NGX_HAVE_DEFERRED_ACCEPT */
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
896
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
897 #if (NGX_HAVE_IP_RECVDSTADDR)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
898
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
899 if (ls[i].wildcard
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
900 && ls[i].type == SOCK_DGRAM
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
901 && ls[i].sockaddr->sa_family == AF_INET)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
902 {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
903 value = 1;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
904
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
905 if (setsockopt(ls[i].fd, IPPROTO_IP, IP_RECVDSTADDR,
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
906 (const void *) &value, sizeof(int))
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
907 == -1)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
908 {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
909 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
910 "setsockopt(IP_RECVDSTADDR) "
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
911 "for %V failed, ignored",
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
912 &ls[i].addr_text);
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
913 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
914 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
915
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
916 #elif (NGX_HAVE_IP_PKTINFO)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
917
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
918 if (ls[i].wildcard
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
919 && ls[i].type == SOCK_DGRAM
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
920 && ls[i].sockaddr->sa_family == AF_INET)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
921 {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
922 value = 1;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
923
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
924 if (setsockopt(ls[i].fd, IPPROTO_IP, IP_PKTINFO,
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
925 (const void *) &value, sizeof(int))
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
926 == -1)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
927 {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
928 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
929 "setsockopt(IP_PKTINFO) "
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
930 "for %V failed, ignored",
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
931 &ls[i].addr_text);
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
932 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
933 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
934
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
935 #endif
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
936
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
937 #if (NGX_HAVE_INET6 && NGX_HAVE_IPV6_RECVPKTINFO)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
938
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
939 if (ls[i].wildcard
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
940 && ls[i].type == SOCK_DGRAM
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
941 && ls[i].sockaddr->sa_family == AF_INET6)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
942 {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
943 value = 1;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
944
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
945 if (setsockopt(ls[i].fd, IPPROTO_IPV6, IPV6_RECVPKTINFO,
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
946 (const void *) &value, sizeof(int))
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
947 == -1)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
948 {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
949 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
950 "setsockopt(IPV6_RECVPKTINFO) "
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
951 "for %V failed, ignored",
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
952 &ls[i].addr_text);
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
953 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
954 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
955
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
956 #endif
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
957 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
958
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
959 return;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
960 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
961
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
962
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
963 void
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
964 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
965 {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
966 ngx_uint_t i;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
967 ngx_listening_t *ls;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
968 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
969
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
970 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
971 return;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
972 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973
303
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
974 ngx_accept_mutex_held = 0;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
975 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
976
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
977 ls = cycle->listening.elts;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
978 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
979
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
980 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
981
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
982 if (c) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
983 if (c->read->active) {
6126
adba26ff70b5 Removed the obsolete rtsig module.
Ruslan Ermilov <ru@nginx.com>
parents: 6125
diff changeset
984 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
985
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
986 /*
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
987 * it seems that Linux-2.6.x OpenVZ sends events
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
988 * for closed shared listening sockets unless
4572
67653855682e Fixed spelling in multiline C comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4522
diff changeset
989 * the events was explicitly deleted
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
990 */
1833
86464f8eddd6 workaround for Linux 2.6 OpenVZ
Igor Sysoev <igor@sysoev.ru>
parents: 1435
diff changeset
991
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
992 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
993
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
994 } else {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
995 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
996 }
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
997 }
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
998
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
999 ngx_free_connection(c);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
1000
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents: 2562
diff changeset
1001 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
1002 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1003
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1004 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
1005 "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
1006
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1007 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
1008 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
1009 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
1010 }
2928
7b68caedea01 update r2925
Igor Sysoev <igor@sysoev.ru>
parents: 2854
diff changeset
1011
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1012 #if (NGX_HAVE_UNIX_DOMAIN)
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1013
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1014 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
1015 && 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
1016 && ngx_new_binary == 0)
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1017 {
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1018 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
1019
5137
f941cf265cc5 Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents: 5115
diff changeset
1020 if (ngx_delete_file(name) == NGX_FILE_ERROR) {
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1021 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
1022 ngx_delete_file_n " %s failed", name);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1023 }
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1024 }
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1025
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1026 #endif
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3151
diff changeset
1027
2928
7b68caedea01 update r2925
Igor Sysoev <igor@sysoev.ru>
parents: 2854
diff changeset
1028 ls[i].fd = (ngx_socket_t) -1;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1029 }
4917
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4771
diff changeset
1030
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4771
diff changeset
1031 cycle->listening.nelts = 0;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1032 }
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1033
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1034
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1035 ngx_connection_t *
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1036 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
1037 {
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1038 ngx_uint_t instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1039 ngx_event_t *rev, *wev;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1040 ngx_connection_t *c;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1041
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1042 /* 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
1043
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1044 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
1045 ngx_log_error(NGX_LOG_ALERT, log, 0,
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1046 "the new socket has number %d, "
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1047 "but only %ui files are available",
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1048 s, ngx_cycle->files_n);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1049 return NULL;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1050 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1051
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1052 c = ngx_cycle->free_connections;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1053
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1054 if (c == NULL) {
6872
6ed0922d316b Added cycle parameter to ngx_drain_connections().
Maxim Dounin <mdounin@mdounin.ru>
parents: 6726
diff changeset
1055 ngx_drain_connections((ngx_cycle_t *) ngx_cycle);
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1056 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
1057 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1058
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1059 if (c == NULL) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1060 ngx_log_error(NGX_LOG_ALERT, log, 0,
2254
353dbe12845e fix grammar
Igor Sysoev <igor@sysoev.ru>
parents: 2198
diff changeset
1061 "%ui worker_connections are not enough",
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1062 ngx_cycle->connection_n);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1063
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1064 return NULL;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1065 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1066
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1067 ngx_cycle->free_connections = c->data;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1068 ngx_cycle->free_connection_n--;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1069
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1070 if (ngx_cycle->files && ngx_cycle->files[s] == NULL) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1071 ngx_cycle->files[s] = c;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1072 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1073
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1074 rev = c->read;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1075 wev = c->write;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1076
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1077 ngx_memzero(c, sizeof(ngx_connection_t));
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1078
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1079 c->read = rev;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1080 c->write = wev;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1081 c->fd = s;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1082 c->log = log;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1083
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1084 instance = rev->instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1085
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1086 ngx_memzero(rev, sizeof(ngx_event_t));
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1087 ngx_memzero(wev, sizeof(ngx_event_t));
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1088
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1089 rev->instance = !instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1090 wev->instance = !instance;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1091
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1092 rev->index = NGX_INVALID_INDEX;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1093 wev->index = NGX_INVALID_INDEX;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1094
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1095 rev->data = c;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1096 wev->data = c;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1097
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1098 wev->write = 1;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1099
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1100 return c;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1101 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1102
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1103
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1104 void
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1105 ngx_free_connection(ngx_connection_t *c)
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1106 {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1107 c->data = ngx_cycle->free_connections;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1108 ngx_cycle->free_connections = c;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1109 ngx_cycle->free_connection_n++;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1110
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1111 if (ngx_cycle->files && ngx_cycle->files[c->fd] == c) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1112 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
1113 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1114 }
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1115
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1116
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1117 void
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1118 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
1119 {
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1120 ngx_err_t err;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1121 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
1122 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
1123
5360
3d2d3e1cf427 Win32: MinGW GCC compatibility.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5283
diff changeset
1124 if (c->fd == (ngx_socket_t) -1) {
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1125 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
1126 return;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1127 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1128
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1129 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
1130 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
1131 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1132
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1133 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
1134 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
1135 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1136
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1137 if (!c->shared) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1138 if (ngx_del_conn) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1139 ngx_del_conn(c, NGX_CLOSE_EVENT);
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1140
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1141 } else {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1142 if (c->read->active || c->read->disabled) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1143 ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1144 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1145
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1146 if (c->write->active || c->write->disabled) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1147 ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1148 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1149 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1150 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1151
5821
3f5f0ab59b35 Events: processing of posted events changed from LIFO to FIFO.
Valentin Bartenev <vbart@nginx.com>
parents: 5820
diff changeset
1152 if (c->read->posted) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1153 ngx_delete_posted_event(c->read);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1154 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1155
5821
3f5f0ab59b35 Events: processing of posted events changed from LIFO to FIFO.
Valentin Bartenev <vbart@nginx.com>
parents: 5820
diff changeset
1156 if (c->write->posted) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1157 ngx_delete_posted_event(c->write);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1158 }
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1159
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1160 c->read->closed = 1;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1161 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
1162
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1163 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
1164
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1165 log_error = c->log_error;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1166
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1167 ngx_free_connection(c);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1168
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1169 fd = c->fd;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1170 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
1171
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1172 if (c->shared) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1173 return;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1174 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6265
diff changeset
1175
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1176 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
1177
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1178 err = ngx_socket_errno;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1179
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1180 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
1181
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1182 switch (log_error) {
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1183
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1184 case NGX_ERROR_INFO:
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1185 level = NGX_LOG_INFO;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1186 break;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1187
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1188 case NGX_ERROR_ERR:
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1189 level = NGX_LOG_ERR;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1190 break;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1191
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1192 default:
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1193 level = NGX_LOG_CRIT;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1194 }
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1195
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1196 } else {
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1197 level = NGX_LOG_CRIT;
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1198 }
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1199
6726
631753428ecb Core: use c->log while closing connection.
Ruslan Ermilov <ru@nginx.com>
parents: 6559
diff changeset
1200 ngx_log_error(level, c->log, err, 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
1201 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1202 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1203
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
1204
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1205 void
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1206 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
1207 {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1208 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
1209 "reusable connection: %ui", reusable);
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1210
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1211 if (c->reusable) {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1212 ngx_queue_remove(&c->queue);
6873
426828549afc Improved connection draining with small number of connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6872
diff changeset
1213 ngx_cycle->reusable_connections_n--;
5115
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1214
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1215 #if (NGX_STAT_STUB)
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1216 (void) ngx_atomic_fetch_add(ngx_stat_waiting, -1);
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1217 #endif
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1218 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1219
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1220 c->reusable = reusable;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1221
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1222 if (reusable) {
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1223 /* 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
1224
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1225 ngx_queue_insert_head(
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1226 (ngx_queue_t *) &ngx_cycle->reusable_connections_queue, &c->queue);
6873
426828549afc Improved connection draining with small number of connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6872
diff changeset
1227 ngx_cycle->reusable_connections_n++;
5115
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1228
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1229 #if (NGX_STAT_STUB)
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1230 (void) ngx_atomic_fetch_add(ngx_stat_waiting, 1);
a29c574d61fa Status: introduced the "ngx_stat_waiting" counter.
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
1231 #endif
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1232 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1233 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1234
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1235
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1236 static void
6872
6ed0922d316b Added cycle parameter to ngx_drain_connections().
Maxim Dounin <mdounin@mdounin.ru>
parents: 6726
diff changeset
1237 ngx_drain_connections(ngx_cycle_t *cycle)
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1238 {
6873
426828549afc Improved connection draining with small number of connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6872
diff changeset
1239 ngx_uint_t i, n;
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1240 ngx_queue_t *q;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1241 ngx_connection_t *c;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1242
6873
426828549afc Improved connection draining with small number of connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6872
diff changeset
1243 n = ngx_max(ngx_min(32, cycle->reusable_connections_n / 8), 1);
426828549afc Improved connection draining with small number of connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6872
diff changeset
1244
426828549afc Improved connection draining with small number of connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6872
diff changeset
1245 for (i = 0; i < n; i++) {
6872
6ed0922d316b Added cycle parameter to ngx_drain_connections().
Maxim Dounin <mdounin@mdounin.ru>
parents: 6726
diff changeset
1246 if (ngx_queue_empty(&cycle->reusable_connections_queue)) {
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1247 break;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1248 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1249
6872
6ed0922d316b Added cycle parameter to ngx_drain_connections().
Maxim Dounin <mdounin@mdounin.ru>
parents: 6726
diff changeset
1250 q = ngx_queue_last(&cycle->reusable_connections_queue);
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1251 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
1252
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1253 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
1254 "reusing connection");
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1255
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1256 c->close = 1;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1257 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
1258 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1259 }
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1260
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3676
diff changeset
1261
6220
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1262 void
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1263 ngx_close_idle_connections(ngx_cycle_t *cycle)
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1264 {
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1265 ngx_uint_t i;
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1266 ngx_connection_t *c;
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1267
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1268 c = cycle->connections;
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1269
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1270 for (i = 0; i < cycle->connection_n; i++) {
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1271
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1272 /* THREAD: lock */
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1273
6265
954b67727af3 Win32: fixed build with MinGW and MinGW-w64 gcc.
Kouhei Sutou <kou@cozmixng.org>
parents: 6220
diff changeset
1274 if (c[i].fd != (ngx_socket_t) -1 && c[i].idle) {
6220
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1275 c[i].close = 1;
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1276 c[i].read->handler(c[i].read);
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1277 }
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1278 }
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1279 }
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1280
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6218
diff changeset
1281
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1282 ngx_int_t
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1283 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
1284 ngx_uint_t port)
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1285 {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1286 socklen_t len;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1287 ngx_uint_t addr;
6559
adf25b8d0431 Introduced the ngx_sockaddr_t type.
Ruslan Ermilov <ru@nginx.com>
parents: 6555
diff changeset
1288 ngx_sockaddr_t sa;
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1289 struct sockaddr_in *sin;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1290 #if (NGX_HAVE_INET6)
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1291 ngx_uint_t i;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1292 struct sockaddr_in6 *sin6;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1293 #endif
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1294
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1295 addr = 0;
5463
1ab1cf63f885 Core: keep the length of the local sockaddr.
Ruslan Ermilov <ru@nginx.com>
parents: 5456
diff changeset
1296
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1297 if (c->local_socklen) {
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1298 switch (c->local_sockaddr->sa_family) {
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1299
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1300 #if (NGX_HAVE_INET6)
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1301 case AF_INET6:
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1302 sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1303
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1304 for (i = 0; addr == 0 && i < 16; i++) {
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1305 addr |= sin6->sin6_addr.s6_addr[i];
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1306 }
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1307
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1308 break;
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1309 #endif
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1310
5464
30e806b8636a Fixed handling of UNIX-domain sockets.
Ruslan Ermilov <ru@nginx.com>
parents: 5463
diff changeset
1311 #if (NGX_HAVE_UNIX_DOMAIN)
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1312 case AF_UNIX:
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1313 addr = 1;
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1314 break;
5464
30e806b8636a Fixed handling of UNIX-domain sockets.
Ruslan Ermilov <ru@nginx.com>
parents: 5463
diff changeset
1315 #endif
30e806b8636a Fixed handling of UNIX-domain sockets.
Ruslan Ermilov <ru@nginx.com>
parents: 5463
diff changeset
1316
5983
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1317 default: /* AF_INET */
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1318 sin = (struct sockaddr_in *) c->local_sockaddr;
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1319 addr = sin->sin_addr.s_addr;
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1320 break;
69c4912066a4 Core: make ngx_connection_local_sockaddr() always assign address.
Roman Arutyunyan <arut@nginx.com>
parents: 5821
diff changeset
1321 }
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1322 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1323
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1324 if (addr == 0) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1325
6559
adf25b8d0431 Introduced the ngx_sockaddr_t type.
Ruslan Ermilov <ru@nginx.com>
parents: 6555
diff changeset
1326 len = sizeof(ngx_sockaddr_t);
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1327
6559
adf25b8d0431 Introduced the ngx_sockaddr_t type.
Ruslan Ermilov <ru@nginx.com>
parents: 6555
diff changeset
1328 if (getsockname(c->fd, &sa.sockaddr, &len) == -1) {
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1329 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1330 return NGX_ERROR;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1331 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1332
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1333 c->local_sockaddr = ngx_palloc(c->pool, len);
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1334 if (c->local_sockaddr == NULL) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1335 return NGX_ERROR;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1336 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1337
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1338 ngx_memcpy(c->local_sockaddr, &sa, len);
5463
1ab1cf63f885 Core: keep the length of the local sockaddr.
Ruslan Ermilov <ru@nginx.com>
parents: 5456
diff changeset
1339
1ab1cf63f885 Core: keep the length of the local sockaddr.
Ruslan Ermilov <ru@nginx.com>
parents: 5456
diff changeset
1340 c->local_socklen = len;
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1341 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1342
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1343 if (s == NULL) {
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1344 return NGX_OK;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1345 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1346
5463
1ab1cf63f885 Core: keep the length of the local sockaddr.
Ruslan Ermilov <ru@nginx.com>
parents: 5456
diff changeset
1347 s->len = ngx_sock_ntop(c->local_sockaddr, c->local_socklen,
1ab1cf63f885 Core: keep the length of the local sockaddr.
Ruslan Ermilov <ru@nginx.com>
parents: 5456
diff changeset
1348 s->data, s->len, port);
2854
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1349
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1350 return NGX_OK;
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1351 }
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1352
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1353
d788477f5a67 ngx_connection_local_sockaddr()
Igor Sysoev <igor@sysoev.ru>
parents: 2806
diff changeset
1354 ngx_int_t
7007
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1355 ngx_tcp_nodelay(ngx_connection_t *c)
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1356 {
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1357 int tcp_nodelay;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1358
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1359 if (c->tcp_nodelay != NGX_TCP_NODELAY_UNSET) {
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1360 return NGX_OK;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1361 }
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1362
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1363 ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0, "tcp_nodelay");
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1364
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1365 tcp_nodelay = 1;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1366
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1367 if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1368 (const void *) &tcp_nodelay, sizeof(int))
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1369 == -1)
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1370 {
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1371 #if (NGX_SOLARIS)
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1372 if (c->log_error == NGX_ERROR_INFO) {
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1373
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1374 /* Solaris returns EINVAL if a socket has been shut down */
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1375 c->log_error = NGX_ERROR_IGNORE_EINVAL;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1376
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1377 ngx_connection_error(c, ngx_socket_errno,
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1378 "setsockopt(TCP_NODELAY) failed");
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1379
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1380 c->log_error = NGX_ERROR_INFO;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1381
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1382 return NGX_ERROR;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1383 }
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1384 #endif
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1385
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1386 ngx_connection_error(c, ngx_socket_errno,
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1387 "setsockopt(TCP_NODELAY) failed");
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1388 return NGX_ERROR;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1389 }
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1390
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1391 c->tcp_nodelay = NGX_TCP_NODELAY_SET;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1392
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1393 return NGX_OK;
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1394 }
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1395
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1396
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 6873
diff changeset
1397 ngx_int_t
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1398 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
1399 {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
1400 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
1401
2775
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1402 /* 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
1403
2775
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1404 if ((err == NGX_ECONNRESET
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1405 #if (NGX_WIN32)
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1406 || err == NGX_ECONNABORTED
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1407 #endif
2775
01c691e31032 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2774
diff changeset
1408 ) && c->log_error == NGX_ERROR_IGNORE_ECONNRESET)
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1409 {
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1410 return 0;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1411 }
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1412
2560
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1413 #if (NGX_SOLARIS)
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1414 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
1415 return 0;
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1416 }
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1417 #endif
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1418
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
1419 if (err == 0
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
1420 || err == NGX_ECONNRESET
2774
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1421 #if (NGX_WIN32)
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1422 || err == NGX_ECONNABORTED
baad3036086e Winsock uses ECONNABORTED instead of ECONNRESET
Igor Sysoev <igor@sysoev.ru>
parents: 2725
diff changeset
1423 #else
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1424 || err == NGX_EPIPE
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1425 #endif
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 282
diff changeset
1426 || err == NGX_ENOTCONN
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1427 || 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
1428 || err == NGX_ECONNREFUSED
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1833
diff changeset
1429 || err == NGX_ENETDOWN
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1833
diff changeset
1430 || err == NGX_ENETUNREACH
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1833
diff changeset
1431 || 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
1432 || 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
1433 {
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
1434 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
1435
2560
a7443674e429 ignore EINVAL from setsockopt() on Solaris
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1436 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
1437 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
1438 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
1439 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
1440 break;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1441
3151
ad3ddfd06e7d low default connection errors level from alert to error
Igor Sysoev <igor@sysoev.ru>
parents: 2928
diff changeset
1442 default:
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1443 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
1444 }
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1445
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1446 } else {
1917
1b2e83c4886d decrease log level of connection errors while closing socket
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
1447 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
1448 }
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1449
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1450 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
1451
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1452 return NGX_ERROR;
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 242
diff changeset
1453 }