parent
a892d519a6
commit
a27429304e
14 changed files with 61 additions and 71 deletions
|
|
@ -223,7 +223,7 @@ template htons(x: uint16): uint16 =
|
||||||
sockets.ntohs(x)
|
sockets.ntohs(x)
|
||||||
|
|
||||||
when defined(Posix):
|
when defined(Posix):
|
||||||
proc toInt(domain: Domain): TSa_Family =
|
proc toInt(domain: Domain): cint =
|
||||||
case domain
|
case domain
|
||||||
of AF_UNIX: result = posix.AF_UNIX
|
of AF_UNIX: result = posix.AF_UNIX
|
||||||
of AF_INET: result = posix.AF_INET
|
of AF_INET: result = posix.AF_INET
|
||||||
|
|
@ -463,9 +463,9 @@ proc bindAddr*(socket: Socket, port = Port(0), address = "") {.
|
||||||
if address == "":
|
if address == "":
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when defined(Windows):
|
when defined(Windows):
|
||||||
name.sin_family = int16(ord(AF_INET))
|
name.sin_family = uint16(ord(AF_INET))
|
||||||
else:
|
else:
|
||||||
name.sin_family = posix.AF_INET
|
name.sin_family = uint16(posix.AF_INET)
|
||||||
name.sin_port = sockets.htons(uint16(port))
|
name.sin_port = sockets.htons(uint16(port))
|
||||||
name.sin_addr.s_addr = sockets.htonl(INADDR_ANY)
|
name.sin_addr.s_addr = sockets.htonl(INADDR_ANY)
|
||||||
if bindSocket(socket.fd, cast[ptr SockAddr](addr(name)),
|
if bindSocket(socket.fd, cast[ptr SockAddr](addr(name)),
|
||||||
|
|
@ -485,9 +485,9 @@ proc getSockName*(socket: Socket): Port =
|
||||||
## returns the socket's associated port number.
|
## returns the socket's associated port number.
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when defined(Windows):
|
when defined(Windows):
|
||||||
name.sin_family = int16(ord(AF_INET))
|
name.sin_family = uint16(ord(AF_INET))
|
||||||
else:
|
else:
|
||||||
name.sin_family = posix.AF_INET
|
name.sin_family = uint16(posix.AF_INET)
|
||||||
#name.sin_port = htons(cint16(port))
|
#name.sin_port = htons(cint16(port))
|
||||||
#name.sin_addr.s_addr = htonl(INADDR_ANY)
|
#name.sin_addr.s_addr = htonl(INADDR_ANY)
|
||||||
var namelen = sizeof(name).SockLen
|
var namelen = sizeof(name).SockLen
|
||||||
|
|
@ -729,9 +729,9 @@ proc getHostByAddr*(ip: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
result.addrtype = Domain(s.h_addrtype)
|
result.addrtype = Domain(s.h_addrtype)
|
||||||
else:
|
else:
|
||||||
if s.h_addrtype == posix.AF_INET:
|
if s.h_addrtype.cint == posix.AF_INET:
|
||||||
result.addrtype = AF_INET
|
result.addrtype = AF_INET
|
||||||
elif s.h_addrtype == posix.AF_INET6:
|
elif s.h_addrtype.cint == posix.AF_INET6:
|
||||||
result.addrtype = AF_INET6
|
result.addrtype = AF_INET6
|
||||||
else:
|
else:
|
||||||
raiseOSError(osLastError(), "unknown h_addrtype")
|
raiseOSError(osLastError(), "unknown h_addrtype")
|
||||||
|
|
@ -750,9 +750,9 @@ proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
result.addrtype = Domain(s.h_addrtype)
|
result.addrtype = Domain(s.h_addrtype)
|
||||||
else:
|
else:
|
||||||
if s.h_addrtype == posix.AF_INET:
|
if s.h_addrtype.cint == posix.AF_INET:
|
||||||
result.addrtype = AF_INET
|
result.addrtype = AF_INET
|
||||||
elif s.h_addrtype == posix.AF_INET6:
|
elif s.h_addrtype.cint == posix.AF_INET6:
|
||||||
result.addrtype = AF_INET6
|
result.addrtype = AF_INET6
|
||||||
else:
|
else:
|
||||||
raiseOSError(osLastError(), "unknown h_addrtype")
|
raiseOSError(osLastError(), "unknown h_addrtype")
|
||||||
|
|
|
||||||
|
|
@ -440,8 +440,7 @@ const Sockaddr_un_path_length* = 108
|
||||||
|
|
||||||
type
|
type
|
||||||
Socklen* {.importc: "socklen_t", header: "<sys/socket.h>".} = cuint
|
Socklen* {.importc: "socklen_t", header: "<sys/socket.h>".} = cuint
|
||||||
# cushort really
|
TSa_Family* {.importc: "sa_family_t", header: "<sys/socket.h>".} = cushort
|
||||||
TSa_Family* {.importc: "sa_family_t", header: "<sys/socket.h>".} = cshort
|
|
||||||
|
|
||||||
SockAddr* {.importc: "struct sockaddr", header: "<sys/socket.h>",
|
SockAddr* {.importc: "struct sockaddr", header: "<sys/socket.h>",
|
||||||
pure, final.} = object ## struct sockaddr
|
pure, final.} = object ## struct sockaddr
|
||||||
|
|
|
||||||
|
|
@ -472,10 +472,10 @@ const MSG_NOSIGNAL* = cint(16384)
|
||||||
const MSG_PEEK* = cint(2)
|
const MSG_PEEK* = cint(2)
|
||||||
const MSG_TRUNC* = cint(32)
|
const MSG_TRUNC* = cint(32)
|
||||||
const MSG_WAITALL* = cint(256)
|
const MSG_WAITALL* = cint(256)
|
||||||
const AF_INET* = TSa_Family(2)
|
const AF_INET* = cint(2)
|
||||||
const AF_INET6* = TSa_Family(10)
|
const AF_INET6* = cint(10)
|
||||||
const AF_UNIX* = TSa_Family(1)
|
const AF_UNIX* = cint(1)
|
||||||
const AF_UNSPEC* = TSa_Family(0)
|
const AF_UNSPEC* = cint(0)
|
||||||
const SHUT_RD* = cint(0)
|
const SHUT_RD* = cint(0)
|
||||||
const SHUT_RDWR* = cint(2)
|
const SHUT_RDWR* = cint(2)
|
||||||
const SHUT_WR* = cint(1)
|
const SHUT_WR* = cint(1)
|
||||||
|
|
|
||||||
|
|
@ -371,10 +371,10 @@ const MSG_NOSIGNAL* = cint(131072)
|
||||||
const MSG_PEEK* = cint(2)
|
const MSG_PEEK* = cint(2)
|
||||||
const MSG_TRUNC* = cint(16)
|
const MSG_TRUNC* = cint(16)
|
||||||
const MSG_WAITALL* = cint(64)
|
const MSG_WAITALL* = cint(64)
|
||||||
const AF_INET* = TSa_Family(2)
|
const AF_INET* = cint(2)
|
||||||
const AF_INET6* = TSa_Family(28)
|
const AF_INET6* = cint(28)
|
||||||
const AF_UNIX* = TSa_Family(1)
|
const AF_UNIX* = cint(1)
|
||||||
const AF_UNSPEC* = TSa_Family(0)
|
const AF_UNSPEC* = cint(0)
|
||||||
const SHUT_RD* = cint(0)
|
const SHUT_RD* = cint(0)
|
||||||
const SHUT_RDWR* = cint(2)
|
const SHUT_RDWR* = cint(2)
|
||||||
const SHUT_WR* = cint(1)
|
const SHUT_WR* = cint(1)
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,7 @@ else:
|
||||||
|
|
||||||
type
|
type
|
||||||
Socklen* {.importc: "socklen_t", header: "<sys/socket.h>".} = cuint
|
Socklen* {.importc: "socklen_t", header: "<sys/socket.h>".} = cuint
|
||||||
TSa_Family* {.importc: "sa_family_t", header: "<sys/socket.h>".} = cint
|
TSa_Family* {.importc: "sa_family_t", header: "<sys/socket.h>".} = cushort
|
||||||
|
|
||||||
SockAddr* {.importc: "struct sockaddr", header: "<sys/socket.h>",
|
SockAddr* {.importc: "struct sockaddr", header: "<sys/socket.h>",
|
||||||
pure, final.} = object ## struct sockaddr
|
pure, final.} = object ## struct sockaddr
|
||||||
|
|
|
||||||
|
|
@ -488,10 +488,10 @@ var SOMAXCONN* {.importc: "SOMAXCONN", header: "<sys/socket.h>".}: cint
|
||||||
var MSG_PEEK* {.importc: "MSG_PEEK", header: "<sys/socket.h>".}: cint
|
var MSG_PEEK* {.importc: "MSG_PEEK", header: "<sys/socket.h>".}: cint
|
||||||
var MSG_TRUNC* {.importc: "MSG_TRUNC", header: "<sys/socket.h>".}: cint
|
var MSG_TRUNC* {.importc: "MSG_TRUNC", header: "<sys/socket.h>".}: cint
|
||||||
var MSG_WAITALL* {.importc: "MSG_WAITALL", header: "<sys/socket.h>".}: cint
|
var MSG_WAITALL* {.importc: "MSG_WAITALL", header: "<sys/socket.h>".}: cint
|
||||||
var AF_INET* {.importc: "AF_INET", header: "<sys/socket.h>".}: TSa_Family
|
var AF_INET* {.importc: "AF_INET", header: "<sys/socket.h>".}: cint
|
||||||
var AF_INET6* {.importc: "AF_INET6", header: "<sys/socket.h>".}: TSa_Family
|
var AF_INET6* {.importc: "AF_INET6", header: "<sys/socket.h>".}: cint
|
||||||
var AF_UNIX* {.importc: "AF_UNIX", header: "<sys/socket.h>".}: TSa_Family
|
var AF_UNIX* {.importc: "AF_UNIX", header: "<sys/socket.h>".}: cint
|
||||||
var AF_UNSPEC* {.importc: "AF_UNSPEC", header: "<sys/socket.h>".}: TSa_Family
|
var AF_UNSPEC* {.importc: "AF_UNSPEC", header: "<sys/socket.h>".}: cint
|
||||||
var SHUT_RD* {.importc: "SHUT_RD", header: "<sys/socket.h>".}: cint
|
var SHUT_RD* {.importc: "SHUT_RD", header: "<sys/socket.h>".}: cint
|
||||||
var SHUT_RDWR* {.importc: "SHUT_RDWR", header: "<sys/socket.h>".}: cint
|
var SHUT_RDWR* {.importc: "SHUT_RDWR", header: "<sys/socket.h>".}: cint
|
||||||
var SHUT_WR* {.importc: "SHUT_WR", header: "<sys/socket.h>".}: cint
|
var SHUT_WR* {.importc: "SHUT_WR", header: "<sys/socket.h>".}: cint
|
||||||
|
|
|
||||||
|
|
@ -38,11 +38,11 @@ when defined(windows) or defined(nimdoc):
|
||||||
|
|
||||||
if domain == Domain.AF_INET6:
|
if domain == Domain.AF_INET6:
|
||||||
var saddr: Sockaddr_in6
|
var saddr: Sockaddr_in6
|
||||||
saddr.sin6_family = int16(toInt(domain))
|
saddr.sin6_family = uint16(toInt(domain))
|
||||||
doBind(saddr)
|
doBind(saddr)
|
||||||
else:
|
else:
|
||||||
var saddr: Sockaddr_in
|
var saddr: Sockaddr_in
|
||||||
saddr.sin_family = int16(toInt(domain))
|
saddr.sin_family = uint16(toInt(domain))
|
||||||
doBind(saddr)
|
doBind(saddr)
|
||||||
|
|
||||||
proc doConnect(socket: AsyncFD, addrInfo: ptr AddrInfo): Future[void] =
|
proc doConnect(socket: AsyncFD, addrInfo: ptr AddrInfo): Future[void] =
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ proc `==`*(a, b: Port): bool {.borrow.}
|
||||||
proc `$`*(p: Port): string {.borrow.}
|
proc `$`*(p: Port): string {.borrow.}
|
||||||
## returns the port number as a string
|
## returns the port number as a string
|
||||||
|
|
||||||
proc toInt*(domain: Domain): cshort
|
proc toInt*(domain: Domain): cint
|
||||||
## Converts the Domain enum to a platform-dependent ``cint``.
|
## Converts the Domain enum to a platform-dependent ``cint``.
|
||||||
|
|
||||||
proc toInt*(typ: SockType): cint
|
proc toInt*(typ: SockType): cint
|
||||||
|
|
@ -122,12 +122,12 @@ proc toInt*(p: Protocol): cint
|
||||||
## Converts the Protocol enum to a platform-dependent ``cint``.
|
## Converts the Protocol enum to a platform-dependent ``cint``.
|
||||||
|
|
||||||
when not useWinVersion:
|
when not useWinVersion:
|
||||||
proc toInt(domain: Domain): cshort =
|
proc toInt(domain: Domain): cint =
|
||||||
case domain
|
case domain
|
||||||
of AF_UNSPEC: result = posix.AF_UNSPEC.cshort
|
of AF_UNSPEC: result = posix.AF_UNSPEC.cint
|
||||||
of AF_UNIX: result = posix.AF_UNIX.cshort
|
of AF_UNIX: result = posix.AF_UNIX.cint
|
||||||
of AF_INET: result = posix.AF_INET.cshort
|
of AF_INET: result = posix.AF_INET.cint
|
||||||
of AF_INET6: result = posix.AF_INET6.cshort
|
of AF_INET6: result = posix.AF_INET6.cint
|
||||||
|
|
||||||
proc toKnownDomain*(family: cint): Option[Domain] =
|
proc toKnownDomain*(family: cint): Option[Domain] =
|
||||||
## Converts the platform-dependent ``cint`` to the Domain or none(),
|
## Converts the platform-dependent ``cint`` to the Domain or none(),
|
||||||
|
|
@ -155,8 +155,8 @@ when not useWinVersion:
|
||||||
of IPPROTO_ICMP: result = posix.IPPROTO_ICMP
|
of IPPROTO_ICMP: result = posix.IPPROTO_ICMP
|
||||||
|
|
||||||
else:
|
else:
|
||||||
proc toInt(domain: Domain): cshort =
|
proc toInt(domain: Domain): cint =
|
||||||
result = toU16(ord(domain))
|
result = toU32(ord(domain)).cint
|
||||||
|
|
||||||
proc toKnownDomain*(family: cint): Option[Domain] =
|
proc toKnownDomain*(family: cint): Option[Domain] =
|
||||||
## Converts the platform-dependent ``cint`` to the Domain or none(),
|
## Converts the platform-dependent ``cint`` to the Domain or none(),
|
||||||
|
|
@ -456,9 +456,9 @@ proc getSockDomain*(socket: SocketHandle): Domain =
|
||||||
if getsockname(socket, cast[ptr SockAddr](addr(name)),
|
if getsockname(socket, cast[ptr SockAddr](addr(name)),
|
||||||
addr(namelen)) == -1'i32:
|
addr(namelen)) == -1'i32:
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
if name.sin6_family == nativeAfInet:
|
if name.sin6_family.cint == nativeAfInet:
|
||||||
result = AF_INET
|
result = AF_INET
|
||||||
elif name.sin6_family == nativeAfInet6:
|
elif name.sin6_family.cint == nativeAfInet6:
|
||||||
result = AF_INET6
|
result = AF_INET6
|
||||||
else:
|
else:
|
||||||
raiseOSError(osLastError(), "unknown socket family in getSockFamily")
|
raiseOSError(osLastError(), "unknown socket family in getSockFamily")
|
||||||
|
|
@ -466,9 +466,9 @@ proc getSockDomain*(socket: SocketHandle): Domain =
|
||||||
|
|
||||||
proc getAddrString*(sockAddr: ptr SockAddr): string =
|
proc getAddrString*(sockAddr: ptr SockAddr): string =
|
||||||
## return the string representation of address within sockAddr
|
## return the string representation of address within sockAddr
|
||||||
if sockAddr.sa_family == nativeAfInet:
|
if sockAddr.sa_family.cint == nativeAfInet:
|
||||||
result = $inet_ntoa(cast[ptr Sockaddr_in](sockAddr).sin_addr)
|
result = $inet_ntoa(cast[ptr Sockaddr_in](sockAddr).sin_addr)
|
||||||
elif sockAddr.sa_family == nativeAfInet6:
|
elif sockAddr.sa_family.cint == nativeAfInet6:
|
||||||
let addrLen = when not useWinVersion: posix.INET6_ADDRSTRLEN
|
let addrLen = when not useWinVersion: posix.INET6_ADDRSTRLEN
|
||||||
else: 46 # it's actually 46 in both cases
|
else: 46 # it's actually 46 in both cases
|
||||||
result = newString(addrLen)
|
result = newString(addrLen)
|
||||||
|
|
@ -491,9 +491,9 @@ proc getSockName*(socket: SocketHandle): Port =
|
||||||
## returns the socket's associated port number.
|
## returns the socket's associated port number.
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when useWinVersion:
|
when useWinVersion:
|
||||||
name.sin_family = int16(ord(AF_INET))
|
name.sin_family = uint16(ord(AF_INET))
|
||||||
else:
|
else:
|
||||||
name.sin_family = posix.AF_INET
|
name.sin_family = uint16(posix.AF_INET)
|
||||||
#name.sin_port = htons(cint16(port))
|
#name.sin_port = htons(cint16(port))
|
||||||
#name.sin_addr.s_addr = htonl(INADDR_ANY)
|
#name.sin_addr.s_addr = htonl(INADDR_ANY)
|
||||||
var namelen = sizeof(name).SockLen
|
var namelen = sizeof(name).SockLen
|
||||||
|
|
@ -510,9 +510,9 @@ proc getLocalAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
|
||||||
of AF_INET:
|
of AF_INET:
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when useWinVersion:
|
when useWinVersion:
|
||||||
name.sin_family = int16(ord(AF_INET))
|
name.sin_family = uint16(ord(AF_INET))
|
||||||
else:
|
else:
|
||||||
name.sin_family = posix.AF_INET
|
name.sin_family = uint16(posix.AF_INET)
|
||||||
var namelen = sizeof(name).SockLen
|
var namelen = sizeof(name).SockLen
|
||||||
if getsockname(socket, cast[ptr SockAddr](addr(name)),
|
if getsockname(socket, cast[ptr SockAddr](addr(name)),
|
||||||
addr(namelen)) == -1'i32:
|
addr(namelen)) == -1'i32:
|
||||||
|
|
@ -522,9 +522,9 @@ proc getLocalAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
|
||||||
of AF_INET6:
|
of AF_INET6:
|
||||||
var name: Sockaddr_in6
|
var name: Sockaddr_in6
|
||||||
when useWinVersion:
|
when useWinVersion:
|
||||||
name.sin6_family = int16(ord(AF_INET6))
|
name.sin6_family = uint16(ord(AF_INET6))
|
||||||
else:
|
else:
|
||||||
name.sin6_family = posix.AF_INET6
|
name.sin6_family = uint16(posix.AF_INET6)
|
||||||
var namelen = sizeof(name).SockLen
|
var namelen = sizeof(name).SockLen
|
||||||
if getsockname(socket, cast[ptr SockAddr](addr(name)),
|
if getsockname(socket, cast[ptr SockAddr](addr(name)),
|
||||||
addr(namelen)) == -1'i32:
|
addr(namelen)) == -1'i32:
|
||||||
|
|
@ -547,9 +547,9 @@ proc getPeerAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
|
||||||
of AF_INET:
|
of AF_INET:
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when useWinVersion:
|
when useWinVersion:
|
||||||
name.sin_family = int16(ord(AF_INET))
|
name.sin_family = uint16(ord(AF_INET))
|
||||||
else:
|
else:
|
||||||
name.sin_family = posix.AF_INET
|
name.sin_family = uint16(posix.AF_INET)
|
||||||
var namelen = sizeof(name).SockLen
|
var namelen = sizeof(name).SockLen
|
||||||
if getpeername(socket, cast[ptr SockAddr](addr(name)),
|
if getpeername(socket, cast[ptr SockAddr](addr(name)),
|
||||||
addr(namelen)) == -1'i32:
|
addr(namelen)) == -1'i32:
|
||||||
|
|
@ -559,9 +559,9 @@ proc getPeerAddr*(socket: SocketHandle, domain: Domain): (string, Port) =
|
||||||
of AF_INET6:
|
of AF_INET6:
|
||||||
var name: Sockaddr_in6
|
var name: Sockaddr_in6
|
||||||
when useWinVersion:
|
when useWinVersion:
|
||||||
name.sin6_family = int16(ord(AF_INET6))
|
name.sin6_family = uint16(ord(AF_INET6))
|
||||||
else:
|
else:
|
||||||
name.sin6_family = posix.AF_INET6
|
name.sin6_family = uint16(posix.AF_INET6)
|
||||||
var namelen = sizeof(name).SockLen
|
var namelen = sizeof(name).SockLen
|
||||||
if getpeername(socket, cast[ptr SockAddr](addr(name)),
|
if getpeername(socket, cast[ptr SockAddr](addr(name)),
|
||||||
addr(namelen)) == -1'i32:
|
addr(namelen)) == -1'i32:
|
||||||
|
|
|
||||||
|
|
@ -423,13 +423,13 @@ proc toSockAddr*(address: IpAddress, port: Port, sa: var Sockaddr_storage,
|
||||||
|
|
||||||
proc fromSockAddrAux(sa: ptr Sockaddr_storage, sl: Socklen,
|
proc fromSockAddrAux(sa: ptr Sockaddr_storage, sl: Socklen,
|
||||||
address: var IpAddress, port: var Port) =
|
address: var IpAddress, port: var Port) =
|
||||||
if sa.ss_family.int == toInt(AF_INET) and sl == sizeof(Sockaddr_in).Socklen:
|
if sa.ss_family.cint == toInt(AF_INET) and sl == sizeof(Sockaddr_in).Socklen:
|
||||||
address = IpAddress(family: IpAddressFamily.IPv4)
|
address = IpAddress(family: IpAddressFamily.IPv4)
|
||||||
let s = cast[ptr Sockaddr_in](sa)
|
let s = cast[ptr Sockaddr_in](sa)
|
||||||
copyMem(addr address.address_v4[0], addr s.sin_addr,
|
copyMem(addr address.address_v4[0], addr s.sin_addr,
|
||||||
sizeof(address.address_v4))
|
sizeof(address.address_v4))
|
||||||
port = ntohs(s.sin_port).Port
|
port = ntohs(s.sin_port).Port
|
||||||
elif sa.ss_family.int == toInt(AF_INET6) and
|
elif sa.ss_family.cint == toInt(AF_INET6) and
|
||||||
sl == sizeof(Sockaddr_in6).Socklen:
|
sl == sizeof(Sockaddr_in6).Socklen:
|
||||||
address = IpAddress(family: IpAddressFamily.IPv6)
|
address = IpAddress(family: IpAddressFamily.IPv6)
|
||||||
let s = cast[ptr Sockaddr_in6](sa)
|
let s = cast[ptr Sockaddr_in6](sa)
|
||||||
|
|
@ -758,10 +758,7 @@ proc bindAddr*(socket: Socket, port = Port(0), address = "") {.
|
||||||
|
|
||||||
if address == "":
|
if address == "":
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when useWinVersion:
|
name.sin_family = toInt(AF_INET).uint16
|
||||||
name.sin_family = toInt(AF_INET).int16
|
|
||||||
else:
|
|
||||||
name.sin_family = toInt(AF_INET)
|
|
||||||
name.sin_port = htons(port.uint16)
|
name.sin_port = htons(port.uint16)
|
||||||
name.sin_addr.s_addr = htonl(INADDR_ANY)
|
name.sin_addr.s_addr = htonl(INADDR_ANY)
|
||||||
if bindAddr(socket.fd, cast[ptr SockAddr](addr(name)),
|
if bindAddr(socket.fd, cast[ptr SockAddr](addr(name)),
|
||||||
|
|
@ -952,7 +949,7 @@ proc setSockOpt*(socket: Socket, opt: SOBool, value: bool, level = SOL_SOCKET) {
|
||||||
|
|
||||||
when defined(posix) and not defined(nimdoc):
|
when defined(posix) and not defined(nimdoc):
|
||||||
proc makeUnixAddr(path: string): Sockaddr_un =
|
proc makeUnixAddr(path: string): Sockaddr_un =
|
||||||
result.sun_family = AF_UNIX.toInt
|
result.sun_family = AF_UNIX.uint16
|
||||||
if path.len >= Sockaddr_un_path_length:
|
if path.len >= Sockaddr_un_path_length:
|
||||||
raise newException(ValueError, "socket path too long")
|
raise newException(ValueError, "socket path too long")
|
||||||
copyMem(addr result.sun_path, path.cstring, path.len + 1)
|
copyMem(addr result.sun_path, path.cstring, path.len + 1)
|
||||||
|
|
|
||||||
|
|
@ -464,7 +464,7 @@ type
|
||||||
lpVendorInfo: cstring
|
lpVendorInfo: cstring
|
||||||
|
|
||||||
SockAddr* {.importc: "SOCKADDR", header: "winsock2.h".} = object
|
SockAddr* {.importc: "SOCKADDR", header: "winsock2.h".} = object
|
||||||
sa_family*: int16 # unsigned
|
sa_family*: uint16
|
||||||
sa_data*: array[0..13, char]
|
sa_data*: array[0..13, char]
|
||||||
|
|
||||||
PSockAddr = ptr SockAddr
|
PSockAddr = ptr SockAddr
|
||||||
|
|
@ -474,7 +474,7 @@ type
|
||||||
|
|
||||||
Sockaddr_in* {.importc: "SOCKADDR_IN",
|
Sockaddr_in* {.importc: "SOCKADDR_IN",
|
||||||
header: "winsock2.h".} = object
|
header: "winsock2.h".} = object
|
||||||
sin_family*: int16
|
sin_family*: uint16
|
||||||
sin_port*: uint16
|
sin_port*: uint16
|
||||||
sin_addr*: InAddr
|
sin_addr*: InAddr
|
||||||
sin_zero*: array[0..7, char]
|
sin_zero*: array[0..7, char]
|
||||||
|
|
@ -484,21 +484,21 @@ type
|
||||||
|
|
||||||
Sockaddr_in6* {.importc: "SOCKADDR_IN6",
|
Sockaddr_in6* {.importc: "SOCKADDR_IN6",
|
||||||
header: "ws2tcpip.h".} = object
|
header: "ws2tcpip.h".} = object
|
||||||
sin6_family*: int16
|
sin6_family*: uint16
|
||||||
sin6_port*: uint16
|
sin6_port*: uint16
|
||||||
sin6_flowinfo*: int32 # unsigned
|
sin6_flowinfo*: int32 # unsigned
|
||||||
sin6_addr*: In6_addr
|
sin6_addr*: In6_addr
|
||||||
sin6_scope_id*: int32 # unsigned
|
sin6_scope_id*: int32 # unsigned
|
||||||
|
|
||||||
Sockaddr_in6_old* = object
|
Sockaddr_in6_old* = object
|
||||||
sin6_family*: int16
|
sin6_family*: uint16
|
||||||
sin6_port*: int16 # unsigned
|
sin6_port*: int16 # unsigned
|
||||||
sin6_flowinfo*: int32 # unsigned
|
sin6_flowinfo*: int32 # unsigned
|
||||||
sin6_addr*: In6_addr
|
sin6_addr*: In6_addr
|
||||||
|
|
||||||
Sockaddr_storage* {.importc: "SOCKADDR_STORAGE",
|
Sockaddr_storage* {.importc: "SOCKADDR_STORAGE",
|
||||||
header: "winsock2.h".} = object
|
header: "winsock2.h".} = object
|
||||||
ss_family*: int16
|
ss_family*: uint16
|
||||||
ss_pad1: array[6, byte]
|
ss_pad1: array[6, byte]
|
||||||
ss_align: int64
|
ss_align: int64
|
||||||
ss_pad2: array[112, byte]
|
ss_pad2: array[112, byte]
|
||||||
|
|
|
||||||
|
|
@ -41,10 +41,7 @@ proc createServer(port: Port) {.async.} =
|
||||||
var server = newAsyncNativeSocket()
|
var server = newAsyncNativeSocket()
|
||||||
block:
|
block:
|
||||||
var name: Sockaddr_in
|
var name: Sockaddr_in
|
||||||
when defined(windows):
|
name.sin_family = toInt(AF_INET).uint16
|
||||||
name.sin_family = toInt(AF_INET).int16
|
|
||||||
else:
|
|
||||||
name.sin_family = toInt(AF_INET)
|
|
||||||
name.sin_port = htons(uint16(port))
|
name.sin_port = htons(uint16(port))
|
||||||
name.sin_addr.s_addr = htonl(INADDR_ANY)
|
name.sin_addr.s_addr = htonl(INADDR_ANY)
|
||||||
if bindAddr(server.SocketHandle, cast[ptr SockAddr](addr(name)),
|
if bindAddr(server.SocketHandle, cast[ptr SockAddr](addr(name)),
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,7 @@ proc saveReceivedPort(port: int) =
|
||||||
|
|
||||||
proc prepareAddress(intaddr: uint32, intport: uint16): ptr Sockaddr_in =
|
proc prepareAddress(intaddr: uint32, intport: uint16): ptr Sockaddr_in =
|
||||||
result = cast[ptr Sockaddr_in](alloc0(sizeof(Sockaddr_in)))
|
result = cast[ptr Sockaddr_in](alloc0(sizeof(Sockaddr_in)))
|
||||||
when defined(windows):
|
result.sin_family = toInt(nativesockets.AF_INET).uint16
|
||||||
result.sin_family = toInt(nativesockets.AF_INET).int16
|
|
||||||
else:
|
|
||||||
result.sin_family = toInt(nativesockets.AF_INET)
|
|
||||||
result.sin_port = nativesockets.htons(intport)
|
result.sin_port = nativesockets.htons(intport)
|
||||||
result.sin_addr.s_addr = nativesockets.htonl(intaddr)
|
result.sin_addr.s_addr = nativesockets.htonl(intaddr)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ when defined(windows):
|
||||||
setBlocking(server, false)
|
setBlocking(server, false)
|
||||||
block:
|
block:
|
||||||
var name = Sockaddr_in()
|
var name = Sockaddr_in()
|
||||||
name.sin_family = toInt(Domain.AF_INET).int16
|
name.sin_family = toInt(Domain.AF_INET).uint16
|
||||||
name.sin_port = htons(uint16(port))
|
name.sin_port = htons(uint16(port))
|
||||||
name.sin_addr.s_addr = htonl(INADDR_ANY)
|
name.sin_addr.s_addr = htonl(INADDR_ANY)
|
||||||
if bindAddr(server, cast[ptr SockAddr](addr(name)),
|
if bindAddr(server, cast[ptr SockAddr](addr(name)),
|
||||||
|
|
|
||||||
|
|
@ -66,11 +66,11 @@ block: # "IpAddress/Sockaddr conversion"
|
||||||
doAssert(ipaddr_1 == ipaddr_2)
|
doAssert(ipaddr_1 == ipaddr_2)
|
||||||
doAssert($ipaddr_1 == $ipaddr_2)
|
doAssert($ipaddr_1 == $ipaddr_2)
|
||||||
|
|
||||||
if sockaddr.ss_family == AF_INET.toInt:
|
if sockaddr.ss_family.cint == AF_INET.toInt:
|
||||||
var sockaddr4: Sockaddr_in
|
var sockaddr4: Sockaddr_in
|
||||||
copyMem(addr sockaddr4, addr sockaddr, sizeof(sockaddr4))
|
copyMem(addr sockaddr4, addr sockaddr, sizeof(sockaddr4))
|
||||||
fromSockAddr(sockaddr4, socklen, ipaddr_2, port_2)
|
fromSockAddr(sockaddr4, socklen, ipaddr_2, port_2)
|
||||||
elif sockaddr.ss_family == AF_INET6.toInt:
|
elif sockaddr.ss_family.cint == AF_INET6.toInt:
|
||||||
var sockaddr6: Sockaddr_in6
|
var sockaddr6: Sockaddr_in6
|
||||||
copyMem(addr sockaddr6, addr sockaddr, sizeof(sockaddr6))
|
copyMem(addr sockaddr6, addr sockaddr, sizeof(sockaddr6))
|
||||||
fromSockAddr(sockaddr6, socklen, ipaddr_2, port_2)
|
fromSockAddr(sockaddr6, socklen, ipaddr_2, port_2)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue