From ace96bf83e711438d517bec33e5d83f27e352726 Mon Sep 17 00:00:00 2001 From: Graham Fawcett Date: Wed, 28 Mar 2018 19:09:16 -0400 Subject: [PATCH] net.connect (with timeout), raise error on connect failure Under Linux (probably POSIX), the current code tests for timeout, but does not test for connection failure. connectAsync() returns succesfully upon an EINPROGRESS result; but at this point, the connection state is still unknown. After selectWrite() is done, we need to test the socket for errors again. --- lib/pure/net.nim | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pure/net.nim b/lib/pure/net.nim index af9eea51a7..2d1ca8a59d 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -1664,6 +1664,9 @@ proc connect*(socket: Socket, address: string, port = Port(0), if selectWrite(s, timeout) != 1: raise newException(TimeoutError, "Call to 'connect' timed out.") else: + let res = getSockOptInt(socket.fd, SOL_SOCKET, SO_ERROR) + if res != 0: + raiseOSError(OSErrorCode(res)) when defineSsl and not defined(nimdoc): if socket.isSSL: socket.fd.setBlocking(true)