summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorAndrew Yourtchenko <ayourtch@gmail.com>2015-06-24 01:37:57 +0200
committerAndrew Yourtchenko <ayourtch@gmail.com>2015-06-24 01:37:57 +0200
commit48ff0d84d0719045d0d5fd907ff11789ce82dd10 (patch)
treedf65707ec9c50f1e8a2ffa21751eea936c61cc34 /lib/pure
parent61336b2404c7b09b7ddb73d17426e6b291b15c9c (diff)
downloadNim-48ff0d84d0719045d0d5fd907ff11789ce82dd10.tar.gz
Add getAddrString which returns string representing the address within SockAddr.
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/rawsockets.nim12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/pure/rawsockets.nim b/lib/pure/rawsockets.nim
index c99f9a7a9..d1922de65 100644
--- a/lib/pure/rawsockets.nim
+++ b/lib/pure/rawsockets.nim
@@ -330,6 +330,18 @@ proc getSockDomain*(socket: SocketHandle): Domain =
     raise newException(OSError, "unknown socket family in getSockFamily")
 
 
+proc getAddrString*(sockAddr: ptr SockAddr): string =
+  ## return the string representation of address within sockAddr
+  if sockAddr.sa_family == posix.AF_INET:
+    result = $inet_ntoa(cast[ptr Sockaddr_in](sockAddr).sin_addr)
+  elif sockAddr.sa_family == posix.AF_INET6:
+    var v6addr = cast[ptr Sockaddr_in6](sockAddr).sin6_addr
+    result = newString(posix.INET6_ADDRSTRLEN)
+    discard posix.inet_ntop(posix.AF_INET6, addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr, result.cstring, result.len.int32)
+  else:
+    raise newException(OSError, "unknown socket family in getAddrString")
+
+
 proc getSockName*(socket: SocketHandle): Port = 
   ## returns the socket's associated port number.
   var name: Sockaddr_in