commit 7ed0346b388350c71a315e6c2567a6178c6bc128 Author: David Goulet dgoulet@ev0ke.net Date: Wed Nov 6 19:41:52 2013 -0500
Fix: add missing errno to handle non-blocking connect()
Fixes #16
Reported-by: adrelanos adrelanos@riseup.net Signed-off-by: David Goulet dgoulet@ev0ke.net --- src/common/socks5.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/common/socks5.c b/src/common/socks5.c index fcd48b6..ede3594 100644 --- a/src/common/socks5.c +++ b/src/common/socks5.c @@ -146,8 +146,14 @@ int socks5_connect(struct connection *conn) do { /* Use the original libc connect() to the Tor. */ ret = tsocks_libc_connect(conn->fd, socks5_addr, sizeof(*socks5_addr)); - } while (ret < 0 && (errno == EINTR || errno == EINPROGRESS)); + } while (ret < 0 && + (errno == EINTR || errno == EINPROGRESS || errno == EALREADY)); if (ret < 0) { + /* The non blocking socket is now connected. */ + if (errno == EISCONN) { + ret = 0; + goto error; + } ret = -errno; PERROR("socks5 libc connect"); }
tor-commits@lists.torproject.org