diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/nativesockets.nim | 2 | ||||
-rw-r--r-- | lib/pure/net.nim | 12 | ||||
-rw-r--r-- | lib/windows/winlean.nim | 4 |
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 |