struct timeval start_time,check_time;
        int     flags = 0;
        int     err = NETDB_INTERNAL;
+       struct sockaddr_in      v4;
 
 /* start timer */
         gettimeofday(&start_time,0);
         if ( ares_init(&channel) != ARES_SUCCESS ) return(NETDB_INTERNAL);
        memset((void *) &ar, 0, sizeof(ar));
 
+       if (addr->sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)addr)->sin6_addr)) {
+               v4.sin_family = AF_INET;
+               v4.sin_port = ((struct sockaddr_in6 *)addr)->sin6_port;
+               v4.sin_addr.s_addr = ((struct sockaddr_in6 *)addr)->sin6_addr.in6_u.u6_addr32[3];
+               addr = (struct sockaddr *) &v4;
+               len = sizeof(v4);
+       } 
+
 /* query DNS server asynchronously */
        if (name) flags |= ARES_NI_LOOKUPHOST | ( numeric? ARES_NI_NUMERICHOST : 0);
        if (service) flags |= ARES_NI_LOOKUPSERVICE | ( numeric? ARES_NI_NUMERICSERV : 0);