annotate src/event/ngx_event_connect.c @ 6658:7fd6b93face8

Events: fixed setting of IP_BIND_ADDRESS_NO_PORT/SO_REUSEADDR. The IP_BIND_ADDRESS_NO_PORT option is set on upstream sockets if proxy_bind does not specify a port. The SO_REUSEADDR option is set on UDP upstream sockets if proxy_bind specifies a port. Due to checking of the wrong port, IP_BIND_ADDRESS_NO_PORT was never set, and SO_REUSEPORT was always set.
author Ruslan Ermilov <ru@nginx.com>
date Mon, 22 Aug 2016 11:40:10 +0300
parents e778fe9a4463
children 56fc55e32f23
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;
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6125
diff changeset
169 }
1397
6c25a49e548a upstream sendfile bit was overridden by r->connection->sendfile
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
170
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
171 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
172
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 545
diff changeset
173 rev = c->read;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 545
diff changeset
174 wev = c->write;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
176 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
177 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
178
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
179 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
180
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 545
diff changeset
181 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
182
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
183 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
184 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
185 goto failed;
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
186 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
187 }
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
188
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
189 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
190 "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
191
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
192 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
193
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
194 if (rc == -1) {
cd91e4a1ad0d nginx-0.0.1-2003-07-23-17:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
195 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
196
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
197
2117
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
198 if (err != NGX_EINPROGRESS
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
199 #if (NGX_WIN32)
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
200 /* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
201 && err != NGX_EAGAIN
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
202 #endif
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
203 )
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
204 {
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
205 if (err == NGX_ECONNREFUSED
2117
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
206 #if (NGX_LINUX)
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
207 /*
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
208 * Linux returns EAGAIN instead of ECONNREFUSED
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
209 * for unix sockets if listen queue is full
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
210 */
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
211 || err == NGX_EAGAIN
9d62abd76ea5 handle connect()'s EAGAIN on Linux
Igor Sysoev <igor@sysoev.ru>
parents: 1869
diff changeset
212 #endif
2540
042dcbaead66 lower ECONNRESET level
Igor Sysoev <igor@sysoev.ru>
parents: 2117
diff changeset
213 || err == NGX_ECONNRESET
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
214 || err == NGX_ENETDOWN
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
215 || err == NGX_ENETUNREACH
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
216 || err == NGX_EHOSTDOWN
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
217 || err == NGX_EHOSTUNREACH)
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
218 {
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
219 level = NGX_LOG_ERR;
1869
192443881e51 add NGX_ENETDOWN, NGX_ENETUNREACH, and NGX_EHOSTDOWN
Igor Sysoev <igor@sysoev.ru>
parents: 1470
diff changeset
220
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
221 } else {
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
222 level = NGX_LOG_CRIT;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
223 }
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
224
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
225 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
226 pc->name);
139
54307053f185 nginx-0.0.1-2003-10-07-19:30:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
227
4421
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
228 ngx_close_connection(c);
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
229 pc->connection = NULL;
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
230
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
231 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
232 }
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
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
235 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
236 if (rc == -1) {
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
237
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
238 /* NGX_EINPROGRESS */
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
239
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
240 return NGX_AGAIN;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
241 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
242
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
243 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
244
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
245 wev->ready = 1;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
246
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
247 return NGX_OK;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
248 }
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
249
6125
4dc8e7b62216 Removed the obsolete aio module.
Ruslan Ermilov <ru@nginx.com>
parents: 5820
diff changeset
250 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
251
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
252 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
253 "connect(): %d", rc);
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
254
167
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
255 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
256 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
257 ngx_blocking_n " failed");
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
258 goto failed;
167
8aef3c72e5da nginx-0.0.1-2003-10-30-19:51:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
259 }
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 /*
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
262 * 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
263 * NT does not support it.
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
264 *
169
edf29bb717da nginx-0.0.1-2003-10-31-19:05:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 168
diff changeset
265 * 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
266 */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
267
166
389d7ee9fa60 nginx-0.0.1-2003-10-30-11:51:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 164
diff changeset
268 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
269 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
270
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
271 return NGX_OK;
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
272 }
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 162
diff changeset
273
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
274 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
275
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
276 /* kqueue */
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
277
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
278 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
279
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
280 } else {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
281
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
282 /* select, poll, /dev/poll */
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
283
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
284 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
285 }
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
286
162
96993d4d5067 nginx-0.0.1-2003-10-28-00:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
287 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
288 goto failed;
162
96993d4d5067 nginx-0.0.1-2003-10-28-00:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
289 }
96993d4d5067 nginx-0.0.1-2003-10-28-00:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
290
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
291 if (rc == -1) {
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
292
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
293 /* NGX_EINPROGRESS */
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
294
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
295 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
296 goto failed;
137
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
297 }
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 return NGX_AGAIN;
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
300 }
2a615b036870 nginx-0.0.1-2003-10-03-19:50:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
301
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
302 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
303
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
304 wev->ready = 1;
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
305
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 131
diff changeset
306 return NGX_OK;
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
307
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
308 failed:
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
309
4421
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
310 ngx_close_connection(c);
fbae1a82de8b Fixed error handling in ngx_event_connect_peer().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
311 pc->connection = NULL;
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
312
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 2540
diff changeset
313 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
314 }
131
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
315
049e78b1f852 nginx-0.0.1-2003-08-14-10:00:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
316
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
317 #if (NGX_HAVE_TRANSPARENT_PROXY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
318
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
319 static ngx_int_t
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
320 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
321 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
322 int value;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
323
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
324 value = 1;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
325
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
326 #if defined(SO_BINDANY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
327
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
328 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
329 (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
330 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
331 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
332 "setsockopt(SO_BINDANY) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
333 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
334 }
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 #else
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
337
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
338 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
339
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
340 case AF_INET:
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
341
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
342 #if defined(IP_TRANSPARENT)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
343
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
344 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
345 (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
346 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
347 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
348 "setsockopt(IP_TRANSPARENT) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
349 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
350 }
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 #elif defined(IP_BINDANY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
353
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
354 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
355 (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
356 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
357 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
358 "setsockopt(IP_BINDANY) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
359 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
360 }
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 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
363
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
364 break;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
365
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
366 #if (NGX_HAVE_INET6)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
367
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
368 case AF_INET6:
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
369
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
370 #if defined(IPV6_TRANSPARENT)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
371
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
372 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
373 (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
374 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
375 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
376 "setsockopt(IPV6_TRANSPARENT) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
377 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
378 }
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 #elif defined(IPV6_BINDANY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
381
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
382 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
383 (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
384 {
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
385 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
386 "setsockopt(IPV6_BINDANY) failed");
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
387 return NGX_ERROR;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
388 }
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 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
391 break;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
392
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
393 #endif /* NGX_HAVE_INET6 */
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
394
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 #endif /* SO_BINDANY */
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
398
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
399 return NGX_OK;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
400 }
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 #endif
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
403
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
404
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
405 ngx_int_t
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
406 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
407 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
408 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
409 }