Merge branch 'singularperturbation-fix-2573-cherry-pick' into devel
This commit is contained in:
commit
6049c01432
4 changed files with 21 additions and 23 deletions
|
|
@ -294,7 +294,7 @@ proc getSocketError*(socket: Socket): OSErrorCode =
|
||||||
if result == 0.OSErrorCode:
|
if result == 0.OSErrorCode:
|
||||||
result = socket.lastError
|
result = socket.lastError
|
||||||
if result == 0.OSErrorCode:
|
if result == 0.OSErrorCode:
|
||||||
raise newException(OSError, "No valid socket error code available")
|
raiseOSError(result, "No valid socket error code available")
|
||||||
|
|
||||||
proc socketError*(socket: Socket, err: int = -1, async = false,
|
proc socketError*(socket: Socket, err: int = -1, async = false,
|
||||||
lastError = (-1).OSErrorCode) =
|
lastError = (-1).OSErrorCode) =
|
||||||
|
|
@ -332,10 +332,8 @@ proc socketError*(socket: Socket, err: int = -1, async = false,
|
||||||
else:
|
else:
|
||||||
let errStr = $ErrErrorString(sslErr, nil)
|
let errStr = $ErrErrorString(sslErr, nil)
|
||||||
raiseSSLError(errStr & ": " & errStr)
|
raiseSSLError(errStr & ": " & errStr)
|
||||||
let osMsg = osErrorMsg osLastError()
|
let osErr = osLastError()
|
||||||
if osMsg != "":
|
raiseOSError(osErr, errStr)
|
||||||
errStr.add ". The OS reports: " & osMsg
|
|
||||||
raise newException(OSError, errStr)
|
|
||||||
of SSL_ERROR_SSL:
|
of SSL_ERROR_SSL:
|
||||||
raiseSSLError()
|
raiseSSLError()
|
||||||
else: raiseSSLError("Unknown Error")
|
else: raiseSSLError("Unknown Error")
|
||||||
|
|
@ -921,7 +919,7 @@ proc send*(socket: Socket, data: string,
|
||||||
socketError(socket, lastError = lastError)
|
socketError(socket, lastError = lastError)
|
||||||
|
|
||||||
if sent != data.len:
|
if sent != data.len:
|
||||||
raise newException(OSError, "Could not send all data.")
|
raiseOSError(osLastError(), "Could not send all data.")
|
||||||
|
|
||||||
proc trySend*(socket: Socket, data: string): bool {.tags: [WriteIOEffect].} =
|
proc trySend*(socket: Socket, data: string): bool {.tags: [WriteIOEffect].} =
|
||||||
## Safe alternative to ``send``. Does not raise an EOS when an error occurs,
|
## Safe alternative to ``send``. Does not raise an EOS when an error occurs,
|
||||||
|
|
|
||||||
|
|
@ -1022,7 +1022,7 @@ proc moveFile*(source, dest: string) {.rtl, extern: "nos$1",
|
||||||
if moveFileA(source, dest, 0'i32) == 0'i32: raiseOSError(osLastError())
|
if moveFileA(source, dest, 0'i32) == 0'i32: raiseOSError(osLastError())
|
||||||
else:
|
else:
|
||||||
if c_rename(source, dest) != 0'i32:
|
if c_rename(source, dest) != 0'i32:
|
||||||
raise newException(OSError, $strerror(errno))
|
raiseOSError(osLastError(), $strerror(errno))
|
||||||
|
|
||||||
when not declared(ENOENT) and not defined(Windows):
|
when not declared(ENOENT) and not defined(Windows):
|
||||||
when NoFakeVars:
|
when NoFakeVars:
|
||||||
|
|
@ -1057,7 +1057,7 @@ proc removeFile*(file: string) {.rtl, extern: "nos$1", tags: [WriteDirEffect].}
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
else:
|
else:
|
||||||
if c_remove(file) != 0'i32 and errno != ENOENT:
|
if c_remove(file) != 0'i32 and errno != ENOENT:
|
||||||
raise newException(OSError, $strerror(errno))
|
raiseOSError(osLastError(), $strerror(errno))
|
||||||
|
|
||||||
proc execShellCmd*(command: string): int {.rtl, extern: "nos$1",
|
proc execShellCmd*(command: string): int {.rtl, extern: "nos$1",
|
||||||
tags: [ExecIOEffect].} =
|
tags: [ExecIOEffect].} =
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,7 @@ proc getAddrInfo*(address: string, port: Port, domain: Domain = AF_INET,
|
||||||
when useWinVersion:
|
when useWinVersion:
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, $gai_strerror(gaiResult))
|
raiseOSError(osLastError(), $gai_strerror(gaiResult))
|
||||||
|
|
||||||
proc dealloc*(ai: ptr AddrInfo) =
|
proc dealloc*(ai: ptr AddrInfo) =
|
||||||
freeaddrinfo(ai)
|
freeaddrinfo(ai)
|
||||||
|
|
@ -251,7 +251,7 @@ proc getServByName*(name, proto: string): Servent {.tags: [ReadIOEffect].} =
|
||||||
var s = winlean.getservbyname(name, proto)
|
var s = winlean.getservbyname(name, proto)
|
||||||
else:
|
else:
|
||||||
var s = posix.getservbyname(name, proto)
|
var s = posix.getservbyname(name, proto)
|
||||||
if s == nil: raise newException(OSError, "Service not found.")
|
if s == nil: raiseOSError(osLastError(), "Service not found.")
|
||||||
result.name = $s.s_name
|
result.name = $s.s_name
|
||||||
result.aliases = cstringArrayToSeq(s.s_aliases)
|
result.aliases = cstringArrayToSeq(s.s_aliases)
|
||||||
result.port = Port(s.s_port)
|
result.port = Port(s.s_port)
|
||||||
|
|
@ -267,7 +267,7 @@ proc getServByPort*(port: Port, proto: string): Servent {.tags: [ReadIOEffect].}
|
||||||
var s = winlean.getservbyport(ze(int16(port)).cint, proto)
|
var s = winlean.getservbyport(ze(int16(port)).cint, proto)
|
||||||
else:
|
else:
|
||||||
var s = posix.getservbyport(ze(int16(port)).cint, proto)
|
var s = posix.getservbyport(ze(int16(port)).cint, proto)
|
||||||
if s == nil: raise newException(OSError, "Service not found.")
|
if s == nil: raiseOSError(osLastError(), "Service not found.")
|
||||||
result.name = $s.s_name
|
result.name = $s.s_name
|
||||||
result.aliases = cstringArrayToSeq(s.s_aliases)
|
result.aliases = cstringArrayToSeq(s.s_aliases)
|
||||||
result.port = Port(s.s_port)
|
result.port = Port(s.s_port)
|
||||||
|
|
@ -286,7 +286,7 @@ proc getHostByAddr*(ip: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
var s = posix.gethostbyaddr(addr(myaddr), sizeof(myaddr).Socklen,
|
var s = posix.gethostbyaddr(addr(myaddr), sizeof(myaddr).Socklen,
|
||||||
cint(posix.AF_INET))
|
cint(posix.AF_INET))
|
||||||
if s == nil:
|
if s == nil:
|
||||||
raise newException(OSError, $hstrerror(h_errno))
|
raiseOSError(osLastError(), $hstrerror(h_errno))
|
||||||
|
|
||||||
result.name = $s.h_name
|
result.name = $s.h_name
|
||||||
result.aliases = cstringArrayToSeq(s.h_aliases)
|
result.aliases = cstringArrayToSeq(s.h_aliases)
|
||||||
|
|
@ -298,7 +298,7 @@ proc getHostByAddr*(ip: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
elif s.h_addrtype == posix.AF_INET6:
|
elif s.h_addrtype == posix.AF_INET6:
|
||||||
result.addrtype = AF_INET6
|
result.addrtype = AF_INET6
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, "unknown h_addrtype")
|
raiseOSError(osLastError(), "unknown h_addrtype")
|
||||||
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
||||||
result.length = int(s.h_length)
|
result.length = int(s.h_length)
|
||||||
|
|
||||||
|
|
@ -319,7 +319,7 @@ proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
elif s.h_addrtype == posix.AF_INET6:
|
elif s.h_addrtype == posix.AF_INET6:
|
||||||
result.addrtype = AF_INET6
|
result.addrtype = AF_INET6
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, "unknown h_addrtype")
|
raiseOSError(osLastError(), "unknown h_addrtype")
|
||||||
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
||||||
result.length = int(s.h_length)
|
result.length = int(s.h_length)
|
||||||
|
|
||||||
|
|
@ -335,7 +335,7 @@ proc getSockDomain*(socket: SocketHandle): Domain =
|
||||||
elif name.sa_family == rawAfInet6:
|
elif name.sa_family == rawAfInet6:
|
||||||
result = AF_INET6
|
result = AF_INET6
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, "unknown socket family in getSockFamily")
|
raiseOSError(osLastError(), "unknown socket family in getSockFamily")
|
||||||
|
|
||||||
|
|
||||||
proc getAddrString*(sockAddr: ptr SockAddr): string =
|
proc getAddrString*(sockAddr: ptr SockAddr): string =
|
||||||
|
|
@ -353,7 +353,7 @@ proc getAddrString*(sockAddr: ptr SockAddr): string =
|
||||||
if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0:
|
if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0:
|
||||||
result = result.substr("::ffff:".len)
|
result = result.substr("::ffff:".len)
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, "unknown socket family in getAddrString")
|
raiseOSError(osLastError(), "unknown socket family in getAddrString")
|
||||||
|
|
||||||
|
|
||||||
proc getSockName*(socket: SocketHandle): Port =
|
proc getSockName*(socket: SocketHandle): Port =
|
||||||
|
|
|
||||||
|
|
@ -441,7 +441,7 @@ template gaiNim(a, p, h, list: expr): stmt =
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, $gai_strerror(gaiResult))
|
raiseOSError(osLastError(), $gai_strerror(gaiResult))
|
||||||
|
|
||||||
proc bindAddr*(socket: Socket, port = Port(0), address = "") {.
|
proc bindAddr*(socket: Socket, port = Port(0), address = "") {.
|
||||||
tags: [ReadIOEffect].} =
|
tags: [ReadIOEffect].} =
|
||||||
|
|
@ -671,7 +671,7 @@ proc getServByName*(name, proto: string): Servent {.tags: [ReadIOEffect].} =
|
||||||
var s = winlean.getservbyname(name, proto)
|
var s = winlean.getservbyname(name, proto)
|
||||||
else:
|
else:
|
||||||
var s = posix.getservbyname(name, proto)
|
var s = posix.getservbyname(name, proto)
|
||||||
if s == nil: raise newException(OSError, "Service not found.")
|
if s == nil: raiseOSError(osLastError(), "Service not found.")
|
||||||
result.name = $s.s_name
|
result.name = $s.s_name
|
||||||
result.aliases = cstringArrayToSeq(s.s_aliases)
|
result.aliases = cstringArrayToSeq(s.s_aliases)
|
||||||
result.port = Port(s.s_port)
|
result.port = Port(s.s_port)
|
||||||
|
|
@ -687,7 +687,7 @@ proc getServByPort*(port: Port, proto: string): Servent {.tags: [ReadIOEffect].}
|
||||||
var s = winlean.getservbyport(ze(int16(port)).cint, proto)
|
var s = winlean.getservbyport(ze(int16(port)).cint, proto)
|
||||||
else:
|
else:
|
||||||
var s = posix.getservbyport(ze(int16(port)).cint, proto)
|
var s = posix.getservbyport(ze(int16(port)).cint, proto)
|
||||||
if s == nil: raise newException(OSError, "Service not found.")
|
if s == nil: raiseOSError(osLastError(), "Service not found.")
|
||||||
result.name = $s.s_name
|
result.name = $s.s_name
|
||||||
result.aliases = cstringArrayToSeq(s.s_aliases)
|
result.aliases = cstringArrayToSeq(s.s_aliases)
|
||||||
result.port = Port(s.s_port)
|
result.port = Port(s.s_port)
|
||||||
|
|
@ -706,7 +706,7 @@ proc getHostByAddr*(ip: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
var s = posix.gethostbyaddr(addr(myaddr), sizeof(myaddr).Socklen,
|
var s = posix.gethostbyaddr(addr(myaddr), sizeof(myaddr).Socklen,
|
||||||
cint(posix.AF_INET))
|
cint(posix.AF_INET))
|
||||||
if s == nil:
|
if s == nil:
|
||||||
raise newException(OSError, $hstrerror(h_errno))
|
raiseOSError(osLastError(), $hstrerror(h_errno))
|
||||||
|
|
||||||
result.name = $s.h_name
|
result.name = $s.h_name
|
||||||
result.aliases = cstringArrayToSeq(s.h_aliases)
|
result.aliases = cstringArrayToSeq(s.h_aliases)
|
||||||
|
|
@ -718,7 +718,7 @@ proc getHostByAddr*(ip: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
elif s.h_addrtype == posix.AF_INET6:
|
elif s.h_addrtype == posix.AF_INET6:
|
||||||
result.addrtype = AF_INET6
|
result.addrtype = AF_INET6
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, "unknown h_addrtype")
|
raiseOSError(osLastError(), "unknown h_addrtype")
|
||||||
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
||||||
result.length = int(s.h_length)
|
result.length = int(s.h_length)
|
||||||
|
|
||||||
|
|
@ -739,7 +739,7 @@ proc getHostByName*(name: string): Hostent {.tags: [ReadIOEffect].} =
|
||||||
elif s.h_addrtype == posix.AF_INET6:
|
elif s.h_addrtype == posix.AF_INET6:
|
||||||
result.addrtype = AF_INET6
|
result.addrtype = AF_INET6
|
||||||
else:
|
else:
|
||||||
raise newException(OSError, "unknown h_addrtype")
|
raiseOSError(osLastError(), "unknown h_addrtype")
|
||||||
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
result.addrList = cstringArrayToSeq(s.h_addr_list)
|
||||||
result.length = int(s.h_length)
|
result.length = int(s.h_length)
|
||||||
|
|
||||||
|
|
@ -1594,7 +1594,7 @@ proc send*(socket: Socket, data: string) {.tags: [WriteIOEffect].} =
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
|
|
||||||
if sent != data.len:
|
if sent != data.len:
|
||||||
raise newException(OSError, "Could not send all data.")
|
raiseOSError(osLastError(), "Could not send all data.")
|
||||||
|
|
||||||
proc sendAsync*(socket: Socket, data: string): int {.tags: [WriteIOEffect].} =
|
proc sendAsync*(socket: Socket, data: string): int {.tags: [WriteIOEffect].} =
|
||||||
## sends data to a non-blocking socket.
|
## sends data to a non-blocking socket.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue