Mercurial > hg > nginx
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"); |