comparison src/core/ngx_cycle.c @ 448:76a79816b771 NGINX_0_7_36

nginx 0.7.36 *) Feature: a preliminary IPv6 support; the "listen" directive of the HTTP module supports IPv6. *) Bugfix: the $ancient_browser variable did not work for browsers preset by a "modern_browser" directives.
author Igor Sysoev <http://sysoev.ru>
date Sat, 21 Feb 2009 00:00:00 +0300
parents 6281966854a5
children a8424ffa495c
comparison
equal deleted inserted replaced
447:40964c811e59 448:76a79816b771
874 874
875 875
876 static ngx_int_t 876 static ngx_int_t
877 ngx_cmp_sockaddr(struct sockaddr *sa1, struct sockaddr *sa2) 877 ngx_cmp_sockaddr(struct sockaddr *sa1, struct sockaddr *sa2)
878 { 878 {
879 struct sockaddr_in *sin1, *sin2; 879 struct sockaddr_in *sin1, *sin2;
880 880 #if (NGX_HAVE_INET6)
881 /* AF_INET only */ 881 struct sockaddr_in6 *sin61, *sin62;
882 882 #endif
883 if (sa1->sa_family != AF_INET || sa2->sa_family != AF_INET) { 883
884 if (sa1->sa_family != sa2->sa_family) {
884 return NGX_DECLINED; 885 return NGX_DECLINED;
885 } 886 }
886 887
887 sin1 = (struct sockaddr_in *) sa1; 888 switch (sa1->sa_family) {
888 sin2 = (struct sockaddr_in *) sa2; 889
889 890 #if (NGX_HAVE_INET6)
890 if (sin1->sin_addr.s_addr != sin2->sin_addr.s_addr) { 891 case AF_INET6:
891 return NGX_DECLINED; 892 sin61 = (struct sockaddr_in6 *) sa1;
892 } 893 sin62 = (struct sockaddr_in6 *) sa2;
893 894
894 if (sin1->sin_port != sin2->sin_port) { 895 if (sin61->sin6_port != sin61->sin6_port) {
895 return NGX_DECLINED; 896 return NGX_DECLINED;
897 }
898
899 if (ngx_memcmp(&sin61->sin6_addr, &sin62->sin6_addr, 16) != 0) {
900 return NGX_DECLINED;
901 }
902
903 break;
904 #endif
905
906 default: /* AF_INET */
907
908 sin1 = (struct sockaddr_in *) sa1;
909 sin2 = (struct sockaddr_in *) sa2;
910
911 if (sin1->sin_port != sin2->sin_port) {
912 return NGX_DECLINED;
913 }
914
915 if (sin1->sin_addr.s_addr != sin2->sin_addr.s_addr) {
916 return NGX_DECLINED;
917 }
918
919 break;
896 } 920 }
897 921
898 return NGX_OK; 922 return NGX_OK;
899 } 923 }
900 924