Mercurial > hg > bitcoin
changeset 2551:bb6f81dae658 draft
Use getnameinfo() to get canonical IPv6 addresses
author | Pieter Wuille <pieter.wuille@gmail.com> |
---|---|
date | Mon, 14 May 2012 00:43:21 +0200 |
parents | 453d84fc6e11 |
children | e12a52335289 |
files | src/netbase.cpp |
diffstat | 1 files changed, 13 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -711,7 +711,19 @@ std::string CNetAddr::ToStringIP() const { - if (IsIPv4()) + CService serv(*this, 0); +#ifdef USE_IPV6 + struct sockaddr_storage sockaddr; +#else + struct sockaddr sockaddr; +#endif + socklen_t socklen = sizeof(sockaddr); + if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) { + char name[1025] = ""; + if (!getnameinfo((const struct sockaddr*)&sockaddr, socklen, name, sizeof(name), NULL, 0, NI_NUMERICHOST)) + return std::string(name); + } + if (IsIPv4()) return strprintf("%u.%u.%u.%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0)); else return strprintf("%x:%x:%x:%x:%x:%x:%x:%x",