connect: replace inet_ntop with getnameinfo
PATCH 1/1 connect: replace inet_ntop with getnameinfo
inet_ntop is not protocol independent.
getnameinfo(3) is part of POSIX and is available when getaddrinfo(3) is. This code is only compiled when NO_IPV6 isn't defined.
The old method was buggy anyway, not every ipv6 address was converted properly because the buffer (addr) was too small.
Signed-off-by Benjamin Kramer <[email protected]>
--- connect.c | 15 ++++----------- 1 files changed, 4 insertions(+), 11 deletions(-)
connect.c +4 -11
@@ -177,18 +177,11 @@ static enum protocol get_protocol(const char *name)static const char *ai_name (const struct addrinfo *ai) { -static char addr[INET_ADDRSTRLEN ]; -if (AF_INET == ai->ai_family ) { -struct sockaddr_in *in; - in = (struct sockaddr_in *)ai->ai_addr; -inet_ntop (ai->ai_family, &in->sin_addr, addr,sizeof (addr)); - }else if (AF_INET6 == ai->ai_family ) { -struct sockaddr_in6 *in; - in = (struct sockaddr_in6 *)ai->ai_addr; -inet_ntop (ai->ai_family, &in->sin6_addr, addr,sizeof (addr)); - }else { +static char addr[NI_MAXHOST ]; +if (getnameinfo (ai->ai_addr, ai->ai_addrlen, addr,sizeof (addr),NULL ,0 , +NI_NUMERICHOST ) !=0 )strcpy (addr,"(unknown)" ); - } +return addr; }
Signature · 1 line
1.6.3.rc1.53.gadc1