diff options
-rw-r--r-- | lib/pure/nativesockets.nim | 16 | ||||
-rw-r--r-- | lib/windows/winlean.nim | 3 | ||||
-rw-r--r-- | tests/stdlib/tnativesockets.nim | 8 |
3 files changed, 27 insertions, 0 deletions
diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim index d51dbd475..0a7ffb3b3 100644 --- a/lib/pure/nativesockets.nim +++ b/lib/pure/nativesockets.nim @@ -374,6 +374,22 @@ proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} = result.addrList = cstringArrayToSeq(s.h_addr_list) result.length = int(s.h_length) +proc getHostname*(): string {.tags: [ReadIOEffect].} = + ## Returns the local hostname (not the FQDN) + # https://tools.ietf.org/html/rfc1035#section-2.3.1 + # https://tools.ietf.org/html/rfc2181#section-11 + const size = 64 + result = newString(size) + when useWinVersion: + let success = winlean.getHostname(result, size) + else: + # Posix + let success = posix.getHostname(result, size) + if success != 0.cint: + raiseOSError(osLastError()) + let x = len(cstring(result)) + result.setLen(x) + proc getSockDomain*(socket: SocketHandle): Domain = ## returns the socket's domain (AF_INET or AF_INET6). var name: SockAddr diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim index fa9ce9eed..1a251d0cc 100644 --- a/lib/windows/winlean.nim +++ b/lib/windows/winlean.nim @@ -542,6 +542,9 @@ proc gethostbyaddr*(ip: ptr InAddr, len: cuint, theType: cint): ptr Hostent {. proc gethostbyname*(name: cstring): ptr Hostent {. stdcall, importc: "gethostbyname", dynlib: ws2dll.} +proc gethostname*(hostname: cstring, len: cint): cint {. + stdcall, importc: "gethostname", dynlib: ws2dll.} + proc socket*(af, typ, protocol: cint): SocketHandle {. stdcall, importc: "socket", dynlib: ws2dll.} diff --git a/tests/stdlib/tnativesockets.nim b/tests/stdlib/tnativesockets.nim new file mode 100644 index 000000000..c683647bc --- /dev/null +++ b/tests/stdlib/tnativesockets.nim @@ -0,0 +1,8 @@ +import nativesockets, unittest + +suite "nativesockets": + test "getHostname": + let hostname = getHostname() + check hostname.len > 0 + check hostname.len < 64 + |