mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
Fix OSError errorCode field is not assigned a value (#22954)
In this PR, the following changes were made: 1. Replaced `raise newException(OSError, osErrorMsg(errno))` in batches with `raiseOSError(errcode)`. 2. Replaced `newException(OSError, osErrorMsg(errno))` in batches with `newOSError(errcode)`. There are still some places that have not been replaced. After checking, they are not system errors in the traditional sense. ```nim proc dlclose(lib: LibHandle) = raise newException(OSError, "dlclose not implemented on Nintendo Switch!") ``` ```nim if not fileExists(result) and not dirExists(result): # consider using: `raiseOSError(osLastError(), result)` raise newException(OSError, "file '" & result & "' does not exist") ``` ```nim proc paramStr*(i: int): string = raise newException(OSError, "paramStr is not implemented on Genode") ```
This commit is contained in:
@@ -34,7 +34,7 @@ proc uname*(): Uname =
|
||||
|
||||
var u: Utsname
|
||||
if uname(u) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
result.sysname = charArrayToString u.sysname
|
||||
result.nodename = charArrayToString u.nodename
|
||||
@@ -45,17 +45,17 @@ proc uname*(): Uname =
|
||||
proc fsync*(fd: int) =
|
||||
## synchronize a file's buffer cache to the storage device
|
||||
if fsync(fd.cint) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc stat*(path: string): Stat =
|
||||
## Returns file status in a `Stat` structure
|
||||
if stat(path.cstring, result) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc memoryLock*(a1: pointer, a2: int) =
|
||||
## Locks pages starting from a1 for a1 bytes and prevent them from being swapped.
|
||||
if mlock(a1, a2) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc memoryLockAll*(flags: int) =
|
||||
## Locks all memory for the running process to prevent swapping.
|
||||
@@ -65,23 +65,23 @@ proc memoryLockAll*(flags: int) =
|
||||
## memoryLockAll(MCL_CURRENT or MCL_FUTURE)
|
||||
## ```
|
||||
if mlockall(flags.cint) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc memoryUnlock*(a1: pointer, a2: int) =
|
||||
## Unlock pages starting from a1 for a1 bytes and allow them to be swapped.
|
||||
if munlock(a1, a2) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc memoryUnlockAll*() =
|
||||
## Unlocks all memory for the running process to allow swapping.
|
||||
if munlockall() != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc sendSignal*(pid: Pid, signal: int) =
|
||||
## Sends a signal to a running process by calling `kill`.
|
||||
## Raise exception in case of failure e.g. process not running.
|
||||
if kill(pid, signal.cint) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc mkstemp*(prefix: string, suffix=""): (string, File) =
|
||||
## Creates a unique temporary file from a prefix string. A six-character string
|
||||
@@ -103,14 +103,14 @@ proc mkstemp*(prefix: string, suffix=""): (string, File) =
|
||||
var f: File
|
||||
if open(f, fd, fmReadWrite):
|
||||
return ($tmpl, f)
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
|
||||
proc mkdtemp*(prefix: string): string =
|
||||
## Creates a unique temporary directory from a prefix string. Adds a six chars suffix.
|
||||
## The directory is created with permissions 0700. Returns the directory name.
|
||||
var tmpl = cstring(prefix & "XXXXXX")
|
||||
if mkdtemp(tmpl) == nil:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
raiseOSError(OSErrorCode(errno))
|
||||
return $tmpl
|
||||
|
||||
proc osReleaseFile*(): Config {.since: (1, 5).} =
|
||||
|
||||
@@ -533,7 +533,7 @@ when defined(windows) or defined(nimdoc):
|
||||
if flags.isDisconnectionError(errcode):
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
if dataBuf.buf != nil:
|
||||
dealloc dataBuf.buf
|
||||
dataBuf.buf = nil
|
||||
@@ -551,7 +551,7 @@ when defined(windows) or defined(nimdoc):
|
||||
if flags.isDisconnectionError(err):
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
elif ret == 0:
|
||||
# Request completed immediately.
|
||||
if bytesReceived != 0:
|
||||
@@ -603,7 +603,7 @@ when defined(windows) or defined(nimdoc):
|
||||
if flags.isDisconnectionError(errcode):
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
if dataBuf.buf != nil:
|
||||
dataBuf.buf = nil
|
||||
)
|
||||
@@ -619,7 +619,7 @@ when defined(windows) or defined(nimdoc):
|
||||
if flags.isDisconnectionError(err):
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
elif ret == 0:
|
||||
# Request completed immediately.
|
||||
if bytesReceived != 0:
|
||||
@@ -667,7 +667,7 @@ when defined(windows) or defined(nimdoc):
|
||||
if flags.isDisconnectionError(err):
|
||||
retFuture.complete()
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
retFuture.complete()
|
||||
# We don't deallocate `ol` here because even though this completed
|
||||
@@ -702,7 +702,7 @@ when defined(windows) or defined(nimdoc):
|
||||
if errcode == OSErrorCode(-1):
|
||||
retFuture.complete()
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
)
|
||||
|
||||
let ret = WSASendTo(socket.SocketHandle, addr dataBuf, 1, addr bytesSent,
|
||||
@@ -712,7 +712,7 @@ when defined(windows) or defined(nimdoc):
|
||||
let err = osLastError()
|
||||
if err.int32 != ERROR_IO_PENDING:
|
||||
GC_unref(ol)
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
retFuture.complete()
|
||||
# We don't deallocate `ol` here because even though this completed
|
||||
@@ -746,7 +746,7 @@ when defined(windows) or defined(nimdoc):
|
||||
else:
|
||||
# datagram sockets don't have disconnection,
|
||||
# so we can just raise an exception
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
)
|
||||
|
||||
let res = WSARecvFrom(socket.SocketHandle, addr dataBuf, 1,
|
||||
@@ -757,7 +757,7 @@ when defined(windows) or defined(nimdoc):
|
||||
let err = osLastError()
|
||||
if err.int32 != ERROR_IO_PENDING:
|
||||
GC_unref(ol)
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
# Request completed immediately.
|
||||
if bytesReceived != 0:
|
||||
@@ -808,7 +808,7 @@ when defined(windows) or defined(nimdoc):
|
||||
else:
|
||||
retFuture.complete(newAcceptFut.read)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
|
||||
template completeAccept() {.dirty.} =
|
||||
var listenSock = socket
|
||||
@@ -1468,7 +1468,7 @@ else:
|
||||
if flags.isDisconnectionError(lastError):
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
elif res == 0:
|
||||
@@ -1497,7 +1497,7 @@ else:
|
||||
if flags.isDisconnectionError(lastError):
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
else:
|
||||
@@ -1563,7 +1563,7 @@ else:
|
||||
let lastError = osLastError()
|
||||
if lastError.int32 != EINTR and lastError.int32 != EWOULDBLOCK and
|
||||
lastError.int32 != EAGAIN:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
else:
|
||||
@@ -1589,7 +1589,7 @@ else:
|
||||
let lastError = osLastError()
|
||||
if lastError.int32 != EINTR and lastError.int32 != EWOULDBLOCK and
|
||||
lastError.int32 != EAGAIN:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false
|
||||
else:
|
||||
@@ -1630,7 +1630,7 @@ else:
|
||||
if flags.isDisconnectionError(lastError):
|
||||
return false
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
try:
|
||||
let address = getAddrString(cast[ptr SockAddr](addr sockAddress))
|
||||
@@ -1763,7 +1763,7 @@ when defined(windows) or defined(nimdoc):
|
||||
socket.SocketHandle.setSockOptInt(SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, 1) # 15022
|
||||
retFuture.complete()
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
)
|
||||
|
||||
let ret = connectEx(socket.SocketHandle, addrInfo.ai_addr,
|
||||
@@ -1781,7 +1781,7 @@ when defined(windows) or defined(nimdoc):
|
||||
# With ERROR_IO_PENDING `ol` will be deallocated in `poll`,
|
||||
# and the future will be completed/failed there, too.
|
||||
GC_unref(ol)
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
proc doConnect(socket: AsyncFD, addrInfo: ptr AddrInfo): owned(Future[void]) =
|
||||
let retFuture = newFuture[void]("doConnect")
|
||||
@@ -1798,7 +1798,7 @@ else:
|
||||
# interrupted, keep waiting
|
||||
return false
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(OSErrorCode(ret))))
|
||||
retFuture.fail(newOSError(OSErrorCode(ret)))
|
||||
return true
|
||||
|
||||
let ret = connect(socket.SocketHandle,
|
||||
@@ -1812,7 +1812,7 @@ else:
|
||||
if lastError.int32 == EINTR or lastError.int32 == EINPROGRESS:
|
||||
addWrite(socket, cb)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
|
||||
template asyncAddrInfoLoop(addrInfo: ptr AddrInfo, fd: untyped,
|
||||
protocol: Protocol = IPPROTO_RAW) =
|
||||
|
||||
@@ -146,7 +146,7 @@ proc readBuffer*(f: AsyncFile, buf: pointer, size: int): Future[int] =
|
||||
if errcode.int32 == ERROR_HANDLE_EOF:
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
)
|
||||
ol.offset = DWORD(f.offset and 0xffffffff)
|
||||
ol.offsetHigh = DWORD(f.offset shr 32)
|
||||
@@ -162,7 +162,7 @@ proc readBuffer*(f: AsyncFile, buf: pointer, size: int): Future[int] =
|
||||
# This happens in Windows Server 2003
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
# Request completed immediately.
|
||||
var bytesRead: DWORD
|
||||
@@ -173,7 +173,7 @@ proc readBuffer*(f: AsyncFile, buf: pointer, size: int): Future[int] =
|
||||
if err.int32 == ERROR_HANDLE_EOF:
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(osLastError())))
|
||||
retFuture.fail(newOSError(osLastError()))
|
||||
else:
|
||||
assert bytesRead > 0
|
||||
assert bytesRead <= size
|
||||
@@ -186,7 +186,7 @@ proc readBuffer*(f: AsyncFile, buf: pointer, size: int): Future[int] =
|
||||
if res < 0:
|
||||
let lastError = osLastError()
|
||||
if lastError.int32 != EAGAIN:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
elif res == 0:
|
||||
@@ -228,7 +228,7 @@ proc read*(f: AsyncFile, size: int): Future[string] =
|
||||
if errcode.int32 == ERROR_HANDLE_EOF:
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
if buffer != nil:
|
||||
dealloc buffer
|
||||
buffer = nil
|
||||
@@ -251,7 +251,7 @@ proc read*(f: AsyncFile, size: int): Future[string] =
|
||||
# This happens in Windows Server 2003
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
# Request completed immediately.
|
||||
var bytesRead: DWORD
|
||||
@@ -262,7 +262,7 @@ proc read*(f: AsyncFile, size: int): Future[string] =
|
||||
if err.int32 == ERROR_HANDLE_EOF:
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(osLastError())))
|
||||
retFuture.fail(newOSError(osLastError()))
|
||||
else:
|
||||
assert bytesRead > 0
|
||||
assert bytesRead <= size
|
||||
@@ -279,7 +279,7 @@ proc read*(f: AsyncFile, size: int): Future[string] =
|
||||
if res < 0:
|
||||
let lastError = osLastError()
|
||||
if lastError.int32 != EAGAIN:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
elif res == 0:
|
||||
@@ -350,7 +350,7 @@ proc writeBuffer*(f: AsyncFile, buf: pointer, size: int): Future[void] =
|
||||
assert bytesCount == size.int32
|
||||
retFuture.complete()
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
)
|
||||
# passing -1 here should work according to MSDN, but doesn't. For more
|
||||
# information see
|
||||
@@ -367,14 +367,14 @@ proc writeBuffer*(f: AsyncFile, buf: pointer, size: int): Future[void] =
|
||||
let err = osLastError()
|
||||
if err.int32 != ERROR_IO_PENDING:
|
||||
GC_unref(ol)
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
# Request completed immediately.
|
||||
var bytesWritten: DWORD
|
||||
let overlappedRes = getOverlappedResult(f.fd.Handle,
|
||||
cast[POVERLAPPED](ol), bytesWritten, false.WINBOOL)
|
||||
if not overlappedRes.bool:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(osLastError())))
|
||||
retFuture.fail(newOSError(osLastError()))
|
||||
else:
|
||||
assert bytesWritten == size.int32
|
||||
retFuture.complete()
|
||||
@@ -389,7 +389,7 @@ proc writeBuffer*(f: AsyncFile, buf: pointer, size: int): Future[void] =
|
||||
if res < 0:
|
||||
let lastError = osLastError()
|
||||
if lastError.int32 != EAGAIN:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
else:
|
||||
@@ -423,7 +423,7 @@ proc write*(f: AsyncFile, data: string): Future[void] =
|
||||
assert bytesCount == data.len.int32
|
||||
retFuture.complete()
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(errcode)))
|
||||
retFuture.fail(newOSError(errcode))
|
||||
if buffer != nil:
|
||||
dealloc buffer
|
||||
buffer = nil
|
||||
@@ -442,14 +442,14 @@ proc write*(f: AsyncFile, data: string): Future[void] =
|
||||
dealloc buffer
|
||||
buffer = nil
|
||||
GC_unref(ol)
|
||||
retFuture.fail(newException(OSError, osErrorMsg(err)))
|
||||
retFuture.fail(newOSError(err))
|
||||
else:
|
||||
# Request completed immediately.
|
||||
var bytesWritten: DWORD
|
||||
let overlappedRes = getOverlappedResult(f.fd.Handle,
|
||||
cast[POVERLAPPED](ol), bytesWritten, false.WINBOOL)
|
||||
if not overlappedRes.bool:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(osLastError())))
|
||||
retFuture.fail(newOSError(osLastError()))
|
||||
else:
|
||||
assert bytesWritten == data.len.int32
|
||||
retFuture.complete()
|
||||
@@ -470,7 +470,7 @@ proc write*(f: AsyncFile, data: string): Future[void] =
|
||||
if res < 0:
|
||||
let lastError = osLastError()
|
||||
if lastError.int32 != EAGAIN:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
result = false # We still want this callback to be called.
|
||||
else:
|
||||
|
||||
@@ -682,7 +682,7 @@ when defined(posix) and not useNimNetLite:
|
||||
elif ret == EINTR:
|
||||
return false
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(OSErrorCode(ret))))
|
||||
retFuture.fail(newOSError(OSErrorCode(ret)))
|
||||
return true
|
||||
|
||||
var socketAddr = makeUnixAddr(path)
|
||||
@@ -696,7 +696,7 @@ when defined(posix) and not useNimNetLite:
|
||||
if lastError.int32 == EINTR or lastError.int32 == EINPROGRESS:
|
||||
addWrite(AsyncFD(socket.fd), cb)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
|
||||
proc bindUnix*(socket: AsyncSocket, path: string) {.
|
||||
tags: [ReadIOEffect].} =
|
||||
|
||||
@@ -148,7 +148,7 @@ elif defined(genode):
|
||||
#
|
||||
|
||||
template raiseErr(prc: string) =
|
||||
raise newException(OSError, prc & " not implemented, compile with POSIX suport")
|
||||
raise newException(OSError, prc & " not implemented, compile with POSIX support")
|
||||
|
||||
proc dlclose(lib: LibHandle) =
|
||||
raiseErr(OSError, "dlclose")
|
||||
|
||||
@@ -19,7 +19,7 @@ when defined(windows):
|
||||
retFuture.complete()
|
||||
return true
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(OSErrorCode(ret))))
|
||||
retFuture.fail(newOSError(OSErrorCode(ret)))
|
||||
return true
|
||||
|
||||
var aiList = getAddrInfo(address, port, domain)
|
||||
@@ -45,7 +45,7 @@ when defined(windows):
|
||||
|
||||
freeAddrInfo(aiList)
|
||||
if not success:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
return retFuture
|
||||
|
||||
proc winRecv*(socket: AsyncFD, size: int,
|
||||
@@ -63,7 +63,7 @@ when defined(windows):
|
||||
if flags.isDisconnectionError(lastError):
|
||||
retFuture.complete("")
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
elif res == 0:
|
||||
# Disconnected
|
||||
retFuture.complete("")
|
||||
@@ -88,7 +88,7 @@ when defined(windows):
|
||||
if flags.isDisconnectionError(lastError):
|
||||
retFuture.complete(0)
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
retFuture.complete(res)
|
||||
# TODO: The following causes a massive slowdown.
|
||||
@@ -112,7 +112,7 @@ when defined(windows):
|
||||
if flags.isDisconnectionError(lastError):
|
||||
retFuture.complete()
|
||||
else:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(lastError)))
|
||||
retFuture.fail(newOSError(lastError))
|
||||
else:
|
||||
written.inc(res)
|
||||
if res != netSize:
|
||||
@@ -136,7 +136,7 @@ when defined(windows):
|
||||
var client = nativesockets.accept(sock.SocketHandle,
|
||||
cast[ptr SockAddr](addr(sockAddress)), addr(addrLen))
|
||||
if client == osInvalidSocket:
|
||||
retFuture.fail(newException(OSError, osErrorMsg(osLastError())))
|
||||
retFuture.fail(newOSError(osLastError()))
|
||||
else:
|
||||
retFuture.complete((getAddrString(cast[ptr SockAddr](addr sockAddress)), client.AsyncFD))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user