[torsocks/master] Issue 32: Irssi locks connecting to hidden service

commit 13653186775d65625930341a838511325e246f18 Author: Robert Hogan <robert@roberthogan.net> Date: Tue Oct 25 22:50:11 2011 +0100 Issue 32: Irssi locks connecting to hidden service During connect() we can end up getting a EWOULDBLOCK/EAGAIN while talking to the SOCKS proxy. This seems to happen when attempting to read a SOCKSV4 connect response from Tor when using the command 'torsocks irssi -c 4eiruntyxxbgfv7o.onion' for example. EWOULDBLOCK isn't a valid error during connect(), so if we get it don't return it to the client - use EINPROGRESS instead. Diagnosed and patched by: foobi...@gmail.com --- src/torsocks.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/src/torsocks.c b/src/torsocks.c index c4004d9..f559eec 100644 --- a/src/torsocks.c +++ b/src/torsocks.c @@ -417,6 +417,12 @@ int torsocks_connect_guts(CONNECT_SIGNATURE, int (*original_connect)(CONNECT_SIG if ((newconn->state == FAILED) || (newconn->state == DONE)) kill_socks_request(newconn); errno = rc; + /* We may get either of these if there are no bytes to read from + the non-blocking connection in handle_request(). Since we are + wrapping connect() here we can't return EWOULDBLOCK/EAGAIN + so override it with something the client will accept.*/ + if (errno == EWOULDBLOCK || errno == EAGAIN) + errno = EINPROGRESS; return((rc ? -1 : 0)); } }
participants (1)
-
hoganrobert@torproject.org