Mercurial > hg > nginx
changeset 2573:1374ffff9635
fix $server_addr for wildcard listen, the has been introduced in r2513
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 18 Mar 2009 12:23:57 +0000 |
parents | 9c42c19f364a |
children | 7503d95d6ead |
files | src/http/ngx_http_core_module.c src/http/ngx_http_request.c |
diffstat | 2 files changed, 29 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c Wed Mar 18 12:21:19 2009 +0000 +++ b/src/http/ngx_http_core_module.c Wed Mar 18 12:23:57 2009 +0000 @@ -1791,13 +1791,38 @@ ngx_int_t ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s) { - socklen_t len; - ngx_connection_t *c; - u_char sa[NGX_SOCKADDRLEN]; + socklen_t len; + ngx_uint_t addr; + ngx_connection_t *c; + u_char sa[NGX_SOCKADDRLEN]; + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + ngx_uint_t i; + struct sockaddr_in6 *sin6; +#endif c = r->connection; - if (c->local_sockaddr == NULL) { + switch (c->local_sockaddr->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) c->local_sockaddr; + + for (addr = 0, i = 0; addr == 0 && i < 16; i++) { + addr |= sin6->sin6_addr.s6_addr[i]; + } + + break; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) c->local_sockaddr; + addr = sin->sin_addr.s_addr; + break; + } + + if (addr == 0) { len = NGX_SOCKADDRLEN;
--- a/src/http/ngx_http_request.c Wed Mar 18 12:21:19 2009 +0000 +++ b/src/http/ngx_http_request.c Wed Mar 18 12:23:57 2009 +0000 @@ -310,8 +310,6 @@ * is required to determine a server address */ - c->local_sockaddr = NULL; - if (ngx_http_server_addr(r, NULL) != NGX_OK) { ngx_http_close_connection(c); return;