From dd4d47c671827148bdaf478c7a37460931cd242c Mon Sep 17 00:00:00 2001 From: Federico Ceratto Date: Wed, 1 Mar 2017 08:44:24 +0000 Subject: Add gethostname to nativesockets (#5443) --- lib/pure/nativesockets.nim | 16 ++++++++++++++++ lib/windows/winlean.nim | 3 +++ 2 files changed, 19 insertions(+) (limited to 'lib') 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.} -- cgit 1.4.1-2-gfad0