mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-14 15:23:27 +00:00
Only run the test for the fixed version of poll(...)
This commit is contained in:
@@ -16,47 +16,50 @@ const
|
||||
testPort = Port(17357)
|
||||
|
||||
|
||||
proc createListenSocket(host: string, port: Port): TAsyncFD =
|
||||
result = newAsyncRawSocket()
|
||||
when defined(windows) or defined(nimdoc):
|
||||
discard
|
||||
else:
|
||||
proc createListenSocket(host: string, port: Port): TAsyncFD =
|
||||
result = newAsyncRawSocket()
|
||||
|
||||
SocketHandle(result).setSockOptInt(SOL_SOCKET, SO_REUSEADDR, 1)
|
||||
SocketHandle(result).setSockOptInt(SOL_SOCKET, SO_REUSEADDR, 1)
|
||||
|
||||
var aiList = getAddrInfo(host, port, AF_INET)
|
||||
if SocketHandle(result).bindAddr(aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32:
|
||||
dealloc(aiList)
|
||||
raiseOSError(osLastError())
|
||||
dealloc(aiList)
|
||||
var aiList = getAddrInfo(host, port, AF_INET)
|
||||
if SocketHandle(result).bindAddr(aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32:
|
||||
dealloc(aiList)
|
||||
raiseOSError(osLastError())
|
||||
dealloc(aiList)
|
||||
|
||||
if SocketHandle(result).listen(1) < 0'i32:
|
||||
raiseOSError(osLastError())
|
||||
if SocketHandle(result).listen(1) < 0'i32:
|
||||
raiseOSError(osLastError())
|
||||
|
||||
|
||||
proc testAsyncSend() {.async.} =
|
||||
var
|
||||
ls = createListenSocket(testHost, testPort)
|
||||
s = newAsyncSocket()
|
||||
proc testAsyncSend() {.async.} =
|
||||
var
|
||||
ls = createListenSocket(testHost, testPort)
|
||||
s = newAsyncSocket()
|
||||
|
||||
await s.connect(testHost, testPort)
|
||||
|
||||
var ps = await ls.accept()
|
||||
SocketHandle(ls).close()
|
||||
await s.connect(testHost, testPort)
|
||||
|
||||
var ps = await ls.accept()
|
||||
SocketHandle(ls).close()
|
||||
|
||||
await ps.send("test 1", flags={})
|
||||
s.close()
|
||||
# This send should raise EPIPE
|
||||
await ps.send("test 2", flags={})
|
||||
SocketHandle(ps).close()
|
||||
await ps.send("test 1", flags={})
|
||||
s.close()
|
||||
# This send should raise EPIPE
|
||||
await ps.send("test 2", flags={})
|
||||
SocketHandle(ps).close()
|
||||
|
||||
|
||||
# The bug was, when the poll function handled EvError for us,
|
||||
# our callbacks may never get executed, thus making the event
|
||||
# loop block indefinitely. This is a timer to keep everything
|
||||
# rolling. 400 ms is an arbitrary value, should be enough though.
|
||||
proc timer() {.async.} =
|
||||
await sleepAsync(400)
|
||||
echo("Timer expired.")
|
||||
quit(2)
|
||||
# The bug was, when the poll function handled EvError for us,
|
||||
# our callbacks may never get executed, thus making the event
|
||||
# loop block indefinitely. This is a timer to keep everything
|
||||
# rolling. 400 ms is an arbitrary value, should be enough though.
|
||||
proc timer() {.async.} =
|
||||
await sleepAsync(400)
|
||||
echo("Timer expired.")
|
||||
quit(2)
|
||||
|
||||
|
||||
asyncCheck(testAsyncSend())
|
||||
waitFor(timer())
|
||||
asyncCheck(testAsyncSend())
|
||||
waitFor(timer())
|
||||
|
||||
Reference in New Issue
Block a user