diff options
author | Andrew Yourtchenko <ayourtch@gmail.com> | 2015-06-23 22:59:48 +0200 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2015-06-23 22:59:48 +0200 |
commit | f340f76f45170535effa959543f4a458e1964815 (patch) | |
tree | a74d20af5cea61c89bc46f5663a34bd037ad4ef1 /lib/pure | |
parent | 5f371e1504a7a0cc18262b4b7e2ad55de3ab8325 (diff) | |
download | Nim-f340f76f45170535effa959543f4a458e1964815.tar.gz |
Add getSockDomain to return AF_INET or AF_INET6 of a SocketHandle.
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/rawsockets.nim | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/pure/rawsockets.nim b/lib/pure/rawsockets.nim index 6d656c983..c99f9a7a9 100644 --- a/lib/pure/rawsockets.nim +++ b/lib/pure/rawsockets.nim @@ -315,6 +315,21 @@ proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} = result.addrList = cstringArrayToSeq(s.h_addr_list) result.length = int(s.h_length) +proc getSockDomain*(socket: SocketHandle): Domain = + ## returns the socket's domain (AF_INET or AF_INET6). + var name: SockAddr + var namelen = sizeof(name).SockLen + if getsockname(socket, cast[ptr SockAddr](addr(name)), + addr(namelen)) == -1'i32: + raiseOSError(osLastError()) + if name.sa_family == posix.AF_INET: + result = AF_INET + elif name.sa_family == posix.AF_INET6: + result = AF_INET6 + else: + raise newException(OSError, "unknown socket family in getSockFamily") + + proc getSockName*(socket: SocketHandle): Port = ## returns the socket's associated port number. var name: Sockaddr_in |