Hello all,

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


$ORIGIN example.com.

@ IN SOA @ root (

1 ; Serial

8H ; Refresh

15M ; Retry

1W ; Expire

1D) ; Minimum TTL


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)




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,

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?