annotate src/core/ngx_connection.c @ 9017:c2f5d79cde64 quic

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