summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorskilchen <skilchen@users.noreply.github.com>2018-04-13 23:49:23 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-04-13 23:49:23 +0200
commit34c1ca1dd09fe22f01a13f8fc6f33943a1939a6a (patch)
treec5cac86a0234935c746539e591d05c13813ae63d /lib/pure
parent9e884c31dd7a937f5d69b5303d5fc0a9e6b4c8f2 (diff)
downloadNim-34c1ca1dd09fe22f01a13f8fc6f33943a1939a6a.tar.gz
make nativesockets.Hostent.addrlist readable for ipv4 af_inet addresses (see issue #7314) (#7327)
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/nativesockets.nim20
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim
index 68061853b..74b2c9741 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].} =