Check for async errors in

This commit is contained in:
Kay Zheng
2015-04-18 10:27:35 +08:00
parent 3125058b6a
commit a11a2f0fdb
2 changed files with 44 additions and 3 deletions

View File

@@ -923,9 +923,17 @@ else:
var retFuture = newFuture[void]("connect")
proc cb(fd: TAsyncFD): bool =
# We have connected.
retFuture.complete()
return true
var ret = SocketHandle(fd).getSockOptInt(cint(SOL_SOCKET), cint(SO_ERROR))
if ret == 0:
# We have connected.
retFuture.complete()
return true
elif ret == EINTR:
# interrupted, keep waiting
return false
else:
retFuture.fail(newException(OSError, osErrorMsg(OSErrorCode(ret))))
return true
var aiList = getAddrInfo(address, port, af)
var success = false

View File

@@ -0,0 +1,33 @@
discard """
file: "tasyncconnect.nim"
exitcode: 1
outputsub: "Error: unhandled exception: Connection refused [Exception]"
"""
import
asyncdispatch,
posix
const
testHost = "127.0.0.1"
testPort = Port(17357)
when defined(windows) or defined(nimdoc):
discard
else:
proc testAsyncConnect() {.async.} =
var s = newAsyncRawSocket()
await s.connect(testHost, testPort)
var peerAddr: SockAddr
var addrSize = Socklen(sizeof(peerAddr))
var ret = SocketHandle(s).getpeername(addr(peerAddr), addr(addrSize))
if ret < 0:
echo("`connect(...)` failed but no exception was raised.")
quit(2)
waitFor(testAsyncConnect())