Hello all,


My friend and I are messing around with ipv6 on BIND9. We have created
the following zone file:



$TTL 1D

$ORIGIN example.com.

@ IN SOA @ root (

1 ; Serial

8H ; Refresh

15M ; Retry

1W ; Expire

1D) ; Minimum TTL

IN NS @

IN AAAA 2001:0db8:85a3:08d3:1319:a82e:0370:7344



And we have the following code snippet to test our dns server:



int main()

{



////////////////////// IPv6 ///////////////////////

struct addrinfo *aInfo;

char straddr[INET6_ADDRSTRLEN];



struct sockaddr_in6 target;



if(getaddrinfo("example.com", NULL, NULL, &aInfo) != 0)

{

printf("ERROR");

perror("getaddrinfo");

return 0;

}



printf("aInfo->ai_addrlen is: %d\n", aInfo->ai_addrlen);



memset((char *)&target, 0, sizeof(target));

memcpy((char*)&target.sin6_addr, aInfo->ai_addr,
aInfo->ai_addrlen);



printf("addrInfo = %s\n", inet_ntop(AF_INET6,
&target.sin6_addr, straddr, sizeof(straddr)));



return 0;

}





However, when we run out code, we get the following output:



$ ./a.out

aInfo->ai_addrlen is: 28

addrInfo = a00::2001:db8:85a3:8d3



I have no problem with cutting off the leading zeros, but what is the
a00:: doing in front of the ip address, and why is the full ip address
not being printed?



-Mike-