From 34c1ca1dd09fe22f01a13f8fc6f33943a1939a6a Mon Sep 17 00:00:00 2001 From: skilchen Date: Fri, 13 Apr 2018 23:49:23 +0200 Subject: [PATCH] make nativesockets.Hostent.addrlist readable for ipv4 af_inet addresses (see issue #7314) (#7327) --- lib/pure/nativesockets.nim | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim index 68061853b5..74b2c9741e 100644 --- a/lib/pure/nativesockets.nim +++ b/lib/pure/nativesockets.nim @@ -395,7 +395,15 @@ proc getHostByAddr*(ip: string): Hostent {.tags: [ReadIOEffect].} = result.addrtype = AF_INET6 else: raiseOSError(osLastError(), "unknown h_addrtype") - result.addrList = cstringArrayToSeq(s.h_addr_list) + if result.addrtype == AF_INET: + result.addrlist = @[] + var i = 0 + while not isNil(s.h_addrlist[i]): + var inaddr_ptr = cast[ptr InAddr](s.h_addr_list[i]) + result.addrlist.add($inet_ntoa(inaddr_ptr[])) + inc(i) + else: + result.addrList = cstringArrayToSeq(s.h_addr_list) result.length = int(s.h_length) proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} = @@ -416,7 +424,15 @@ proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} = result.addrtype = AF_INET6 else: raiseOSError(osLastError(), "unknown h_addrtype") - result.addrList = cstringArrayToSeq(s.h_addr_list) + if result.addrtype == AF_INET: + result.addrlist = @[] + var i = 0 + while not isNil(s.h_addrlist[i]): + var inaddr_ptr = cast[ptr InAddr](s.h_addr_list[i]) + result.addrlist.add($inet_ntoa(inaddr_ptr[])) + inc(i) + else: + result.addrList = cstringArrayToSeq(s.h_addr_list) result.length = int(s.h_length) proc getHostname*(): string {.tags: [ReadIOEffect].} =