annotate src/event/ngx_event_connect.c @ 6929:3069dd358ba2

Cancelable timers are now preserved if there are other timers. There is no need to cancel timers early if there are other timers blocking shutdown anyway. Preserving such timers allows nginx to continue some periodic work till the shutdown is actually possible. With the new approach, timers with ev->cancelable are simply ignored when checking if there are any timers left during shutdown.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 07 Mar 2017 18:51:15 +0300
parents 56fc55e32f23
children 8b70d4caa505
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: 3365
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
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
8 #include <ngx_config.h>
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
9 #include <ngx_core.h>
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
10 #include <ngx_event.h>
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_event_connect.h>
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
131
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
13
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
14 #if (NGX_HAVE_TRANSPARENT_PROXY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
15 static ngx_int_t ngx_event_connect_set_transparent(ngx_peer_connection_t *pc,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
16 ngx_socket_t s);
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
17 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
18
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
19
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
20 ngx_int_t
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
21 ngx_event_connect_peer(ngx_peer_connection_t *pc)
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 {
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
23 int rc, type;
6596
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
24 #if (NGX_HAVE_IP_BIND_ADDRESS_NO_PORT || NGX_LINUX)
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
25 in_port_t port;
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
26 #endif
1470
92b5f20d54f4 64-bit update lost in r1355
Igor Sysoev <igor@sysoev.ru>
parents: 1397
diff changeset
27 ngx_int_t event;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
28 ngx_err_t err;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
29 ngx_uint_t level;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
30 ngx_socket_t s;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
31 ngx_event_t *rev, *wev;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
32 ngx_connection_t *c;
122
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
33
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
34 rc = pc->get(pc, pc->data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
35 if (rc != NGX_OK) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
36 return rc;
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
37 }
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
38
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
39 type = (pc->type ? pc->type : SOCK_STREAM);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
41 s = ngx_socket(pc->sockaddr->sa_family, type, 0);
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
42
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
43 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
44 (type == SOCK_STREAM) ? "stream" : "dgram", s);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
45
5360
3d2d3e1cf427 Win32: MinGW GCC compatibility.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5141
diff changeset
46 if (s == (ngx_socket_t) -1) {
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
47 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 ngx_socket_n " failed");
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
49 return NGX_ERROR;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
52
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
53 c = ngx_get_connection(s, pc->log);
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
54
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
55 if (c == NULL) {
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
56 if (ngx_close_socket(s) == -1) {
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
57 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
58 ngx_close_socket_n "failed");
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
59 }
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
60
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
61 return NGX_ERROR;
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
62 }
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
63
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
64 c->type = type;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
65
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
66 if (pc->rcvbuf) {
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
68 (const void *) &pc->rcvbuf, sizeof(int)) == -1)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
69 {
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
70 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 "setsockopt(SO_RCVBUF) failed");
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
72 goto failed;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 if (ngx_nonblocking(s) == -1) {
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
77 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 ngx_nonblocking_n " failed");
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
80 goto failed;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
81 }
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
82
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
83 if (pc->local) {
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
84
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
85 #if (NGX_HAVE_TRANSPARENT_PROXY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
86 if (pc->transparent) {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
87 if (ngx_event_connect_set_transparent(pc, s) != NGX_OK) {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
88 goto failed;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
89 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
90 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
91 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
92
6596
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
93 #if (NGX_HAVE_IP_BIND_ADDRESS_NO_PORT || NGX_LINUX)
6658
7fd6b93face8 Events: fixed setting of IP_BIND_ADDRESS_NO_PORT/SO_REUSEADDR.
Ruslan Ermilov <ru@nginx.com>
parents: 6596
diff changeset
94 port = ngx_inet_get_port(pc->local->sockaddr);
6596
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
95 #endif
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
96
6592
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
97 #if (NGX_HAVE_IP_BIND_ADDRESS_NO_PORT)
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
98
6596
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
99 if (pc->sockaddr->sa_family != AF_UNIX && port == 0) {
6592
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
100 static int bind_address_no_port = 1;
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
101
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
102 if (bind_address_no_port) {
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
103 if (setsockopt(s, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT,
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
104 (const void *) &bind_address_no_port,
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
105 sizeof(int)) == -1)
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
106 {
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
107 err = ngx_socket_errno;
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
108
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
109 if (err != NGX_EOPNOTSUPP && err != NGX_ENOPROTOOPT) {
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
110 ngx_log_error(NGX_LOG_ALERT, pc->log, err,
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
111 "setsockopt(IP_BIND_ADDRESS_NO_PORT) "
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
112 "failed, ignored");
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
113
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
114 } else {
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
115 bind_address_no_port = 0;
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
116 }
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
117 }
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
118 }
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
119 }
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
120
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
121 #endif
2c7b488a61fb Set IP_BIND_ADDRESS_NO_PORT socket option for upstream sockets.
Andrei Belov <defan@nginx.com>
parents: 6530
diff changeset
122
6596
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
123 #if (NGX_LINUX)
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
124
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
125 if (pc->type == SOCK_DGRAM && port != 0) {
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
126 int reuse_addr = 1;
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
127
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
128 if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
129 (const void *) &reuse_addr, sizeof(int))
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
130 == -1)
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
131 {
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
132 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
133 "setsockopt(SO_REUSEADDR) failed");
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
134 goto failed;
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
135 }
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
136 }
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
137
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
138 #endif
e778fe9a4463 Stream: set SO_REUSEADDR for UDP upstream sockets.
Roman Arutyunyan <arut@nginx.com>
parents: 6592
diff changeset
139
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
140 if (bind(s, pc->local->sockaddr, pc->local->socklen) == -1) {
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
141 ngx_log_error(NGX_LOG_CRIT, pc->log, ngx_socket_errno,
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
142 "bind(%V) failed", &pc->local->name);
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
143
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
144 goto failed;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
148 if (type == SOCK_STREAM) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
149 c->recv = ngx_recv;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
150 c->send = ngx_send;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
151 c->recv_chain = ngx_recv_chain;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
152 c->send_chain = ngx_send_chain;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
153
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
154 c->sendfile = 1;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
155
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
156 if (pc->sockaddr->sa_family == AF_UNIX) {
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
157 c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
158 c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
159
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
160 #if (NGX_SOLARIS)
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
161 /* Solaris's sendfilev() supports AF_NCA, AF_INET, and AF_INET6 */
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
162 c->sendfile = 0;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
163 #endif
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
164 }
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
165
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
166 } else { /* type == SOCK_DGRAM */
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
167 c->recv = ngx_udp_recv;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
168 c->send = ngx_send;
6692
56fc55e32f23 Stream: filters.
Roman Arutyunyan <arut@nginx.com>
parents: 6658
diff changeset
169 c->send_chain = ngx_udp_send_chain;
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
170 }
1397
6c25a49e548a upstream sendfile bit was overridden by r->connection->sendfile
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
171
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
172 c->log_error = pc->log_error;
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
173
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 545
diff changeset
174 rev = c->read;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 545
diff changeset
175 wev = c->write;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
177 rev->log = pc->log;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
178 wev->log = pc->log;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
179
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
180 pc->connection = c;
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
181
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 545
diff changeset
182 c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
183
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
184 if (ngx_add_conn) {
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
185 if (ngx_add_conn(c) == NGX_ERROR) {
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
186 goto failed;
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
187 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
188 }
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
189
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
190 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, pc->log, 0,
5600
957d734362ed Fixed format specifier in logging of "c->number".
Sergey Kandaurov <pluknet@nginx.com>
parents: 5360
diff changeset
191 "connect to %V, fd:%d #%uA", pc->name, s, c->number);
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
192
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
193 rc = connect(s, pc->sockaddr, pc->socklen);
122
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
194
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
195 if (rc == -1) {
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
196 err = ngx_socket_errno;
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
197
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
198
2117
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
199 if (err != NGX_EINPROGRESS
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
200 #if (NGX_WIN32)
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
201 /* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
202 && err != NGX_EAGAIN
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
203 #endif
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
204 )
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
205 {
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
206 if (err == NGX_ECONNREFUSED
2117
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
207 #if (NGX_LINUX)
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
208 /*
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
209 * Linux returns EAGAIN instead of ECONNREFUSED
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
210 * for unix sockets if listen queue is full
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
211 */
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
212 || err == NGX_EAGAIN
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
213 #endif
2540
042dcbaead66 lower ECONNRESET level
Igor Sysoev <igor@sysoev.ru>
parents: 2117
diff changeset
214 || err == NGX_ECONNRESET
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
215 || err == NGX_ENETDOWN
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
216 || err == NGX_ENETUNREACH
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
217 || err == NGX_EHOSTDOWN
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
218 || err == NGX_EHOSTUNREACH)
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
219 {
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
220 level = NGX_LOG_ERR;
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
221
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
222 } else {
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
223 level = NGX_LOG_CRIT;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
224 }
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
225
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
226 ngx_log_error(level, c->log, err, "connect() to %V failed",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
227 pc->name);
139
54307053f185 nginx-0.0.1-2003-10-07-19:30:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
228
4421
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
229 ngx_close_connection(c);
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
230 pc->connection = NULL;
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
231
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
232 return NGX_DECLINED;
122
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
233 }
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
234 }
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
235
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
236 if (ngx_add_conn) {
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
237 if (rc == -1) {
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
238
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
239 /* NGX_EINPROGRESS */
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
240
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
241 return NGX_AGAIN;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
242 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
243
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
244 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, pc->log, 0, "connected");
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
245
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
246 wev->ready = 1;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
247
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
248 return NGX_OK;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
249 }
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
250
6125
4dc8e7b62216 Removed the obsolete aio module.
Ruslan Ermilov <ru@nginx.com>
parents: 5820
diff changeset
251 if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
167
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
252
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
253 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, ngx_socket_errno,
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
254 "connect(): %d", rc);
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
255
167
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
256 if (ngx_blocking(s) == -1) {
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
257 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
258 ngx_blocking_n " failed");
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
259 goto failed;
167
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
260 }
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
261
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
262 /*
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
263 * FreeBSD's aio allows to post an operation on non-connected socket.
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
264 * NT does not support it.
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
265 *
169
edf29bb717da nginx-0.0.1-2003-10-31-19:05:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 168
diff changeset
266 * TODO: check in Win32, etc. As workaround we can use NGX_ONESHOT_EVENT
167
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
267 */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
268
166
389d7ee9fa60 nginx-0.0.1-2003-10-30-11:51:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 164
diff changeset
269 rev->ready = 1;
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
270 wev->ready = 1;
166
389d7ee9fa60 nginx-0.0.1-2003-10-30-11:51:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 164
diff changeset
271
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
272 return NGX_OK;
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
273 }
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
274
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
275 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
276
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
277 /* kqueue */
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
278
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
279 event = NGX_CLEAR_EVENT;
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
280
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
281 } else {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
282
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
283 /* select, poll, /dev/poll */
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
284
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
285 event = NGX_LEVEL_EVENT;
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
286 }
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
287
162
96993d4d5067 nginx-0.0.1-2003-10-28-00:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
288 if (ngx_add_event(rev, NGX_READ_EVENT, event) != NGX_OK) {
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
289 goto failed;
162
96993d4d5067 nginx-0.0.1-2003-10-28-00:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
290 }
96993d4d5067 nginx-0.0.1-2003-10-28-00:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
291
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
292 if (rc == -1) {
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
293
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
294 /* NGX_EINPROGRESS */
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
295
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
296 if (ngx_add_event(wev, NGX_WRITE_EVENT, event) != NGX_OK) {
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
297 goto failed;
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
298 }
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
299
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
300 return NGX_AGAIN;
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
301 }
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
302
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
303 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, pc->log, 0, "connected");
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
304
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
305 wev->ready = 1;
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
306
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
307 return NGX_OK;
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
308
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
309 failed:
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
310
4421
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
311 ngx_close_connection(c);
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
312 pc->connection = NULL;
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
313
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
314 return NGX_ERROR;
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
315 }
131
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
316
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
317
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
318 #if (NGX_HAVE_TRANSPARENT_PROXY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
319
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
320 static ngx_int_t
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
321 ngx_event_connect_set_transparent(ngx_peer_connection_t *pc, ngx_socket_t s)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
322 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
323 int value;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
324
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
325 value = 1;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
326
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
327 #if defined(SO_BINDANY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
328
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
329 if (setsockopt(s, SOL_SOCKET, SO_BINDANY,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
330 (const void *) &value, sizeof(int)) == -1)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
331 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
332 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
333 "setsockopt(SO_BINDANY) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
334 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
335 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
336
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
337 #else
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
338
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
339 switch (pc->local->sockaddr->sa_family) {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
340
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
341 case AF_INET:
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
342
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
343 #if defined(IP_TRANSPARENT)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
344
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
345 if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
346 (const void *) &value, sizeof(int)) == -1)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
347 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
348 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
349 "setsockopt(IP_TRANSPARENT) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
350 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
351 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
352
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
353 #elif defined(IP_BINDANY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
354
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
355 if (setsockopt(s, IPPROTO_IP, IP_BINDANY,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
356 (const void *) &value, sizeof(int)) == -1)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
357 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
358 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
359 "setsockopt(IP_BINDANY) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
360 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
361 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
362
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
363 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
364
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
365 break;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
366
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
367 #if (NGX_HAVE_INET6)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
368
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
369 case AF_INET6:
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
370
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
371 #if defined(IPV6_TRANSPARENT)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
372
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
373 if (setsockopt(s, IPPROTO_IPV6, IPV6_TRANSPARENT,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
374 (const void *) &value, sizeof(int)) == -1)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
375 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
376 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
377 "setsockopt(IPV6_TRANSPARENT) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
378 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
379 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
380
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
381 #elif defined(IPV6_BINDANY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
382
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
383 if (setsockopt(s, IPPROTO_IPV6, IPV6_BINDANY,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
384 (const void *) &value, sizeof(int)) == -1)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
385 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
386 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
387 "setsockopt(IPV6_BINDANY) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
388 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
389 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
390
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
391 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
392 break;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
393
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
394 #endif /* NGX_HAVE_INET6 */
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
395
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
396 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
397
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
398 #endif /* SO_BINDANY */
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
399
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
400 return NGX_OK;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
401 }
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
402
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
403 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
404
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
405
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
406 ngx_int_t
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
407 ngx_event_get_peer(ngx_peer_connection_t *pc, void *data)
131
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
408 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
409 return NGX_OK;
131
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
410 }