+ if (rest->ai_family != resa->ai_family) {
+ ret = 0;
+ goto out;
+ }
+
+ switch(resa->ai_family) {
+ case PF_INET:
+ a = (char *)&((struct sockaddr_in *)resa->ai_addr)->sin_addr;
+ t = (char *)&((struct sockaddr_in *)rest->ai_addr)->sin_addr;
+ addrlen = 4;
+
+ break;
+
+#ifdef INET6
+ case PF_INET6:
+ {
+ struct sockaddr_in6 *sin6a, *sin6t;
+
+ sin6a = (struct sockaddr_in6 *)resa->ai_addr;
+ sin6t = (struct sockaddr_in6 *)rest->ai_addr;
+
+ a = (char *)&sin6a->sin6_addr;
+ t = (char *)&sin6t->sin6_addr;
+
+ addrlen = 16;
+
+#ifdef HAVE_SOCKADDR_IN6_SCOPE_ID
+ if (sin6t->sin6_scope_id &&
+ sin6a->sin6_scope_id != sin6t->sin6_scope_id) {
+ ret = 0;
+ goto out;
+ }
+#endif