diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-02-21 07:02:02 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-02-21 07:02:02 +0000 |
commit | a35eaccdec4788e8fb9a883b26fc7c4dcfe1d8f8 (patch) | |
tree | b42648c4cb4eb2cb4a1e585ed7870ede0f551600 /src/core/ngx_cycle.c | |
parent | a883361c47c4fa1abf35fe2497e2bb74d9299e3e (diff) | |
download | nginx-a35eaccdec4788e8fb9a883b26fc7c4dcfe1d8f8.tar.gz nginx-a35eaccdec4788e8fb9a883b26fc7c4dcfe1d8f8.zip |
a prelimiary IPv6 support, HTTP listen
Diffstat (limited to 'src/core/ngx_cycle.c')
-rw-r--r-- | src/core/ngx_cycle.c | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c index aa0d9ce7e..9ee7e65a0 100644 --- a/src/core/ngx_cycle.c +++ b/src/core/ngx_cycle.c @@ -876,23 +876,47 @@ ngx_destroy_cycle_pools(ngx_conf_t *conf) static ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, struct sockaddr *sa2) { - struct sockaddr_in *sin1, *sin2; - - /* AF_INET only */ + struct sockaddr_in *sin1, *sin2; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin61, *sin62; +#endif - if (sa1->sa_family != AF_INET || sa2->sa_family != AF_INET) { + if (sa1->sa_family != sa2->sa_family) { return NGX_DECLINED; } - sin1 = (struct sockaddr_in *) sa1; - sin2 = (struct sockaddr_in *) sa2; + switch (sa1->sa_family) { - if (sin1->sin_addr.s_addr != sin2->sin_addr.s_addr) { - return NGX_DECLINED; - } +#if (NGX_HAVE_INET6) + case AF_INET6: + sin61 = (struct sockaddr_in6 *) sa1; + sin62 = (struct sockaddr_in6 *) sa2; - if (sin1->sin_port != sin2->sin_port) { - return NGX_DECLINED; + if (sin61->sin6_port != sin61->sin6_port) { + return NGX_DECLINED; + } + + if (ngx_memcmp(&sin61->sin6_addr, &sin62->sin6_addr, 16) != 0) { + return NGX_DECLINED; + } + + break; +#endif + + default: /* AF_INET */ + + sin1 = (struct sockaddr_in *) sa1; + sin2 = (struct sockaddr_in *) sa2; + + if (sin1->sin_port != sin2->sin_port) { + return NGX_DECLINED; + } + + if (sin1->sin_addr.s_addr != sin2->sin_addr.s_addr) { + return NGX_DECLINED; + } + + break; } return NGX_OK; |