cleaned up accept-close-race fix #5279
This commit is contained in:
parent
4790b6b203
commit
8ae05c6555
3 changed files with 2 additions and 27 deletions
|
|
@ -772,7 +772,7 @@ when defined(windows) or defined(nimdoc):
|
||||||
sizeof(listenSock).SockLen)
|
sizeof(listenSock).SockLen)
|
||||||
if setoptRet != 0:
|
if setoptRet != 0:
|
||||||
let errcode = osLastError()
|
let errcode = osLastError()
|
||||||
checkCloseError clientSock.closeSocket()
|
discard clientSock.closeSocket()
|
||||||
failAccept(errcode)
|
failAccept(errcode)
|
||||||
else:
|
else:
|
||||||
var localSockaddr, remoteSockaddr: ptr SockAddr
|
var localSockaddr, remoteSockaddr: ptr SockAddr
|
||||||
|
|
|
||||||
|
|
@ -620,28 +620,3 @@ proc selectWrite*(writefds: var seq[SocketHandle],
|
||||||
when defined(Windows):
|
when defined(Windows):
|
||||||
var wsa: WSAData
|
var wsa: WSAData
|
||||||
if wsaStartup(0x0101'i16, addr wsa) != 0: raiseOSError(osLastError())
|
if wsaStartup(0x0101'i16, addr wsa) != 0: raiseOSError(osLastError())
|
||||||
|
|
||||||
proc checkCloseError*(ret: cint) =
|
|
||||||
## Asserts that the return value of close() or closeSocket() syscall
|
|
||||||
## does not indicate a programming error (such as invalid descriptor).
|
|
||||||
## This must only be used when an error has already occurred and
|
|
||||||
## you are performing a cleanup.
|
|
||||||
## Otherwise, error handling must be performed as usual.
|
|
||||||
##
|
|
||||||
## This procedure must be called right after performing the syscall. Example:
|
|
||||||
##
|
|
||||||
## .. code-block:: nim
|
|
||||||
##
|
|
||||||
## let ret = someSysCall()
|
|
||||||
## if ret != 0:
|
|
||||||
## let errcode = osLastError()
|
|
||||||
## checkCloseError sock.closeSocket()
|
|
||||||
## raise newException(OSError, osErrorMsg(errcode))
|
|
||||||
|
|
||||||
if ret != 0:
|
|
||||||
let errcode = osLastError()
|
|
||||||
when useWinVersion:
|
|
||||||
doAssert(errcode.int32 notin {WSANOTINITIALISED, WSAENOTSOCK,
|
|
||||||
WSAEINPROGRESS, WSAEINTR, WSAEWOULDBLOCK})
|
|
||||||
else:
|
|
||||||
doAssert(errcode.int32 notin {EBADF})
|
|
||||||
|
|
|
||||||
|
|
@ -757,7 +757,7 @@ when defined(windows) or defined(nimdoc):
|
||||||
sizeof(listenSock).SockLen)
|
sizeof(listenSock).SockLen)
|
||||||
if setoptRet != 0:
|
if setoptRet != 0:
|
||||||
let errcode = osLastError()
|
let errcode = osLastError()
|
||||||
checkCloseError clientSock.closeSocket()
|
discard clientSock.closeSocket()
|
||||||
failAccept(errcode)
|
failAccept(errcode)
|
||||||
else:
|
else:
|
||||||
var localSockaddr, remoteSockaddr: ptr SockAddr
|
var localSockaddr, remoteSockaddr: ptr SockAddr
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue