summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/nativesockets.nim2
-rw-r--r--lib/pure/net.nim12
-rw-r--r--lib/windows/winlean.nim4
3 files changed, 11 insertions, 7 deletions
diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim
index 280c4e927..68061853b 100644
--- a/lib/pure/nativesockets.nim
+++ b/lib/pure/nativesockets.nim
@@ -31,7 +31,7 @@ else:
   export Sockaddr_storage, Sockaddr_un, Sockaddr_un_path_length
 
 export SocketHandle, Sockaddr_in, Addrinfo, INADDR_ANY, SockAddr, SockLen,
-  Sockaddr_in6,
+  Sockaddr_in6, Sockaddr_storage,
   inet_ntoa, recv, `==`, connect, send, accept, recvfrom, sendto,
   freeAddrInfo
 
diff --git a/lib/pure/net.nim b/lib/pure/net.nim
index bb1c1ce6e..a48e200d8 100644
--- a/lib/pure/net.nim
+++ b/lib/pure/net.nim
@@ -414,7 +414,7 @@ proc isIpAddress*(address_str: string): bool {.tags: [].} =
     return false
   return true
 
-proc toSockAddr*(address: IpAddress, port: Port, sa: var SockAddr, sl: var Socklen) =
+proc toSockAddr*(address: IpAddress, port: Port, sa: var Sockaddr_storage, sl: var Socklen) =
   ## Converts `IpAddress` and `Port` to `SockAddr` and `Socklen`
   let port = htons(uint16(port))
   case address.family
@@ -431,18 +431,18 @@ proc toSockAddr*(address: IpAddress, port: Port, sa: var SockAddr, sl: var Sockl
     s.sin6_port = port
     copyMem(addr s.sin6_addr, unsafeAddr address.address_v6[0], sizeof(s.sin6_addr))
 
-proc fromSockAddr*(sa: SockAddr, sl: Socklen, address: var IpAddress, port: var Port) =
+proc fromSockAddr*(sa: Sockaddr_storage, sl: Socklen, address: var IpAddress, port: var Port) =
   ## Converts `SockAddr` and `Socklen` to `IpAddress` and `Port`. Raises
   ## `ObjectConversionError` in case of invalid `sa` and `sl` arguments.
-  if sa.sa_family.int == AF_INET.int and sl == sizeof(Sockaddr_in).Socklen:
+  if sa.ss_family.int == AF_INET.int and sl == sizeof(Sockaddr_in).Socklen:
     address = IpAddress(family: IpAddressFamily.IPv4)
     let s = cast[ptr Sockaddr_in](unsafeAddr sa)
-    copyMem(addr address.address_v4, addr s.sin_addr, sizeof(address.address_v4))
+    copyMem(addr address.address_v4[0], addr s.sin_addr, sizeof(address.address_v4))
     port = ntohs(s.sin_port).Port
-  elif sa.sa_family.int == AF_INET6.int and sl == sizeof(Sockaddr_in6).Socklen:
+  elif sa.ss_family.int == AF_INET6.int and sl == sizeof(Sockaddr_in6).Socklen:
     address = IpAddress(family: IpAddressFamily.IPv6)
     let s = cast[ptr Sockaddr_in6](unsafeAddr sa)
-    copyMem(addr address.address_v6, addr s.sin6_addr, sizeof(address.address_v6))
+    copyMem(addr address.address_v6[0], addr s.sin6_addr, sizeof(address.address_v6))
     port = ntohs(s.sin6_port).Port
   else:
     raise newException(ObjectConversionError, "Unexpected SockAddr/Socklen")
diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim
index b2c1cc1f5..b2afd3f69 100644
--- a/lib/windows/winlean.nim
+++ b/lib/windows/winlean.nim
@@ -481,6 +481,10 @@ type
     sin6_flowinfo*: int32 # unsigned
     sin6_addr*: In6_addr
 
+  Sockaddr_storage* {.importc: "SOCKADDR_STORAGE",
+                      header: "winsock2.h".} = object
+    ss_family*: int16
+
   Servent* = object
     s_name*: cstring
     s_aliases*: cstringArray