$ diff -r getaddrinfo.c getaddrinfo.new.c
34c34
<  * get address info for ipv4 sockets.
---
>  * get address info for ipv4/v6 sockets.
50c50,52
<
---
>     char hap[16];
>       struct sockaddr_in6 *psin6;
>     int isipv6 = 0;
79,80c81,89
<                       if (!inet_aton(node, &sin.sin_addr))
<                               return EAI_FAIL;
---
>                       if (!inet_aton(node, &sin.sin_addr)){
>                          if(inet_pton(AF_INET6,node,hap)){
>                                  isipv6 = 1;
>                                  psin6->sin6_family = AF_INET6;
>                                  memcpy(&psin6->sin6_addr,hap,16);
>                          }
>                          else
>                                  return EAI_FAIL;
>                       }
124c133
<       if (service)
---
>       if (service){
126c135,137
<
---
>         if(isipv6)
>             psin6->sin6_port= sin.sin_port;
>       }
145c156
<       ai->ai_family = AF_INET;
---
>
147a159,160
>       if(!isipv6){
>       ai->ai_family = AF_INET;
150c163,169
<       ai->ai_canonname = NULL;
---
>       }
>       else{
>       ai->ai_family = AF_INET6;
>       ai->ai_addrlen = sizeof(*psin6);
>       ai->ai_addr = (struct sockaddr_in6 *) psin6;
>     }
>     ai->ai_canonname = NULL;
157d175
<