aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_upstream_round_robin.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-12-23 19:35:12 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-12-23 19:35:12 +0000
commit302cedceb0f6647e3c7578f5210c458e9efc90b4 (patch)
tree2b4b8ee78a866e543411e9be5e71cbce16344c8f /src/http/ngx_http_upstream_round_robin.c
parent8eb5ed2e77c871658e5d204865cc5bfd0f457638 (diff)
downloadnginx-302cedceb0f6647e3c7578f5210c458e9efc90b4.tar.gz
nginx-302cedceb0f6647e3c7578f5210c458e9efc90b4.zip
variable support for unix sockets in fastcgi_pass and proxy_pass
Diffstat (limited to 'src/http/ngx_http_upstream_round_robin.c')
-rw-r--r--src/http/ngx_http_upstream_round_robin.c58
1 files changed, 35 insertions, 23 deletions
diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
index 2479baa78..52bd80858 100644
--- a/src/http/ngx_http_upstream_round_robin.c
+++ b/src/http/ngx_http_upstream_round_robin.c
@@ -279,35 +279,47 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
peers->number = ur->naddrs;
peers->name = &ur->host;
- for (i = 0; i < ur->naddrs; i++) {
+ if (ur->sockaddr) {
+ peers->peer[0].sockaddr = ur->sockaddr;
+ peers->peer[0].socklen = ur->socklen;
+ peers->peer[0].name = ur->host;
+ peers->peer[0].weight = 1;
+ peers->peer[0].current_weight = 1;
+ peers->peer[0].max_fails = 1;
+ peers->peer[0].fail_timeout = 10;
- len = NGX_INET_ADDRSTRLEN + sizeof(":65536") - 1;
+ } else {
- p = ngx_pnalloc(r->pool, len);
- if (p == NULL) {
- return NGX_ERROR;
- }
+ for (i = 0; i < ur->naddrs; i++) {
- len = ngx_inet_ntop(AF_INET, &ur->addrs[i], p, NGX_INET_ADDRSTRLEN);
- len = ngx_sprintf(&p[len], ":%d", ur->port) - p;
+ len = NGX_INET_ADDRSTRLEN + sizeof(":65536") - 1;
- sin = ngx_pcalloc(r->pool, sizeof(struct sockaddr_in));
- if (sin == NULL) {
- return NGX_ERROR;
- }
+ p = ngx_pnalloc(r->pool, len);
+ if (p == NULL) {
+ return NGX_ERROR;
+ }
- sin->sin_family = AF_INET;
- sin->sin_port = htons(ur->port);
- sin->sin_addr.s_addr = ur->addrs[i];
+ len = ngx_inet_ntop(AF_INET, &ur->addrs[i], p, NGX_INET_ADDRSTRLEN);
+ len = ngx_sprintf(&p[len], ":%d", ur->port) - p;
- peers->peer[i].sockaddr = (struct sockaddr *) sin;
- peers->peer[i].socklen = sizeof(struct sockaddr_in);
- peers->peer[i].name.len = len;
- peers->peer[i].name.data = p;
- peers->peer[i].weight = 1;
- peers->peer[i].current_weight = 1;
- peers->peer[i].max_fails = 1;
- peers->peer[i].fail_timeout = 10;
+ sin = ngx_pcalloc(r->pool, sizeof(struct sockaddr_in));
+ if (sin == NULL) {
+ return NGX_ERROR;
+ }
+
+ sin->sin_family = AF_INET;
+ sin->sin_port = htons(ur->port);
+ sin->sin_addr.s_addr = ur->addrs[i];
+
+ peers->peer[i].sockaddr = (struct sockaddr *) sin;
+ peers->peer[i].socklen = sizeof(struct sockaddr_in);
+ peers->peer[i].name.len = len;
+ peers->peer[i].name.data = p;
+ peers->peer[i].weight = 1;
+ peers->peer[i].current_weight = 1;
+ peers->peer[i].max_fails = 1;
+ peers->peer[i].fail_timeout = 10;
+ }
}
rrp->peers = peers;