comparison src/http/ngx_http_core_module.c @ 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 67fea87a6652
comparison
equal deleted inserted replaced
2572:9c42c19f364a 2573:1374ffff9635
1789 1789
1790 1790
1791 ngx_int_t 1791 ngx_int_t
1792 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s) 1792 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s)
1793 { 1793 {
1794 socklen_t len; 1794 socklen_t len;
1795 ngx_connection_t *c; 1795 ngx_uint_t addr;
1796 u_char sa[NGX_SOCKADDRLEN]; 1796 ngx_connection_t *c;
1797 u_char sa[NGX_SOCKADDRLEN];
1798 struct sockaddr_in *sin;
1799 #if (NGX_HAVE_INET6)
1800 ngx_uint_t i;
1801 struct sockaddr_in6 *sin6;
1802 #endif
1797 1803
1798 c = r->connection; 1804 c = r->connection;
1799 1805
1800 if (c->local_sockaddr == NULL) { 1806 switch (c->local_sockaddr->sa_family) {
1807
1808 #if (NGX_HAVE_INET6)
1809 case AF_INET6:
1810 sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
1811
1812 for (addr = 0, i = 0; addr == 0 && i < 16; i++) {
1813 addr |= sin6->sin6_addr.s6_addr[i];
1814 }
1815
1816 break;
1817 #endif
1818
1819 default: /* AF_INET */
1820 sin = (struct sockaddr_in *) c->local_sockaddr;
1821 addr = sin->sin_addr.s_addr;
1822 break;
1823 }
1824
1825 if (addr == 0) {
1801 1826
1802 len = NGX_SOCKADDRLEN; 1827 len = NGX_SOCKADDRLEN;
1803 1828
1804 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) { 1829 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) {
1805 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); 1830 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");