summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2015-09-15 10:37:16 +0100
committerDominik Picheta <dominikpicheta@googlemail.com>2015-09-15 10:37:16 +0100
commit4da5e474148db9298ec0d730046544278d7e6827 (patch)
tree50c27ed7aef949b3e089423874a5bb2a122696b1
parent01c99ff258dfb223e95c5733f62ad7beb2ab5f4d (diff)
downloadNim-4da5e474148db9298ec0d730046544278d7e6827.tar.gz
Implements getPeerAddr/getPeerName on Windows and adds IDX.
-rw-r--r--lib/pure/net.nim8
-rw-r--r--lib/pure/rawsockets.nim4
-rw-r--r--lib/windows/winlean.nim8
3 files changed, 17 insertions, 3 deletions
diff --git a/lib/pure/net.nim b/lib/pure/net.nim
index b7a40121f..0ce5b4d25 100644
--- a/lib/pure/net.nim
+++ b/lib/pure/net.nim
@@ -534,11 +534,15 @@ proc getSockOpt*(socket: Socket, opt: SOBool, level = SOL_SOCKET): bool {.
   result = res != 0
 
 proc getLocalAddr*(socket: Socket): (string, Port) =
-  ## Get the socket's local address and port number
+  ## Get the socket's local address and port number.
+  ##
+  ## This is high-level interface for `getsockname`:idx:.
   getLocalAddr(socket.fd, socket.domain)
 
 proc getPeerAddr*(socket: Socket): (string, Port) =
-  ## Get the socket's peer address and port number
+  ## Get the socket's peer address and port number.
+  ##
+  ## This is high-level interface for `getpeername`:idx:.
   getPeerAddr(socket.fd, socket.domain)
 
 proc setSockOpt*(socket: Socket, opt: SOBool, value: bool, level = SOL_SOCKET) {.
diff --git a/lib/pure/rawsockets.nim b/lib/pure/rawsockets.nim
index 0a69b580e..f5860ef28 100644
--- a/lib/pure/rawsockets.nim
+++ b/lib/pure/rawsockets.nim
@@ -373,6 +373,8 @@ proc getSockName*(socket: SocketHandle): Port =
 
 proc getLocalAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
   ## returns the socket's local address and port number.
+  ##
+  ## Similar to POSIX's `getsockname`:idx:.
   case domain
   of AF_INET:
     var name: Sockaddr_in
@@ -406,6 +408,8 @@ proc getLocalAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
 
 proc getPeerAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
   ## returns the socket's peer address and port number.
+  ##
+  ## Similar to POSIX's `getpeername`:idx:
   case domain
   of AF_INET:
     var name: Sockaddr_in
diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim
index 24015dd3a..84dac6d79 100644
--- a/lib/windows/winlean.nim
+++ b/lib/windows/winlean.nim
@@ -409,7 +409,7 @@ type
     bytes*: array[0..15, char]
 
   Sockaddr_in6* {.importc: "SOCKADDR_IN6",
-                   header: "winsock2.h".} = object
+                   header: "ws2tcpip.h".} = object
     sin6_family*: int16
     sin6_port*: int16 # unsigned
     sin6_flowinfo*: int32 # unsigned
@@ -511,6 +511,9 @@ proc connect*(s: SocketHandle, name: ptr SockAddr, namelen: SockLen): cint {.
 proc getsockname*(s: SocketHandle, name: ptr SockAddr,
                   namelen: ptr SockLen): cint {.
   stdcall, importc: "getsockname", dynlib: ws2dll.}
+proc getpeername*(s: SocketHandle, name: ptr SockAddr,
+                  namelen: ptr SockLen): cint {.
+  stdcall, importc, dynlib: ws2dll.}
 proc getsockopt*(s: SocketHandle, level, optname: cint, optval: pointer,
                  optlen: ptr SockLen): cint {.
   stdcall, importc: "getsockopt", dynlib: ws2dll.}
@@ -572,6 +575,9 @@ proc freeaddrinfo*(ai: ptr AddrInfo) {.
 proc inet_ntoa*(i: InAddr): cstring {.
   stdcall, importc, dynlib: ws2dll.}
 
+proc inet_ntop*(family: cint, paddr: pointer, pStringBuffer: cstring,
+            stringBufSize: int32): cstring {.stdcall, importc, dynlib: ws2dll.}
+
 const
   MAXIMUM_WAIT_OBJECTS* = 0x00000040