[tor-commits] [torsocks/master] Issue 32: Irssi locks connecting to hidden service
hoganrobert at torproject.org
hoganrobert at torproject.org
Wed Oct 26 18:32:47 UTC 2011
commit 13653186775d65625930341a838511325e246f18
Author: Robert Hogan <robert at 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... at 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));
}
}
More information about the tor-commits
mailing list