1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
from net import IpAddress
when defined(windows) or defined(nimdoc):
from winlean import SockAddr, Sockaddr_in, Sockaddr_in6, AF_INET, AF_INET6, SockLen
elif defined(linux) or defined(maxosx):
from posix import SockAddr, Sockaddr_in, Sockaddr_in6, AF_INET, AF_INET6, SockLen
from nativesockets import Port
from net import fromSockAddr
proc fromSockAddrPtr*(sa: ptr SockAddr, address: var IpAddress, flowInfo: var uint32,
scopeId: var uint32) =
var port: Port
if sa.sa_family.uint32 == AF_INET.uint32:
let sa4 = cast[ptr Sockaddr_in](sa)[]
let size = sizeof(Sockaddr_in).SockLen
fromSockAddr(sa4, size, address, port)
elif sa.sa_family.uint32 == AF_INET6.uint32:
let sa6 = cast[ptr Sockaddr_in6](sa)[]
let size = sizeof(Sockaddr_in6).SockLen
fromSockAddr(sa6, size, address, port)
flowInfo = sa6.sin6_flowinfo.uint32
scopeId = sa6.sin6_scope_id.uint32
else:
raise newException(Exception, "unknown sa_family")
|