From: Roger Dingledine Date: Mon, 23 Jan 2012 20:54:02 +0000 (-0500) Subject: set SO_REUSEADDR before we bind, not after X-Git-Tag: tor-0.2.3.12-alpha~28 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=247a21379af1cf90896d9818cf448d9687f6277c;p=thirdparty%2Ftor.git set SO_REUSEADDR before we bind, not after resolves bug 4950 (fixes a bug on commit aba7bb705a6 from #2850) --- diff --git a/changes/bug4950 b/changes/bug4950 new file mode 100644 index 0000000000..d91ec46beb --- /dev/null +++ b/changes/bug4950 @@ -0,0 +1,6 @@ + o Major bugfixes: + - Set the SO_REUSEADDR socket option before we call bind() on outgoing + connections. This change should allow busy exit relays to stop + running out of available sockets as quickly. Fixes bug 4950; + bugfix on 0.2.2.26-beta. + diff --git a/src/or/connection.c b/src/or/connection.c index 462022dffd..c51e7fbeff 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -1338,6 +1338,8 @@ connection_connect(connection_t *conn, const char *address, return -1; } + make_socket_reuseable(s); + if (options->OutboundBindAddress && !tor_addr_is_loopback(addr)) { struct sockaddr_in ext_addr; @@ -1372,8 +1374,6 @@ connection_connect(connection_t *conn, const char *address, log_debug(LD_NET, "Connecting to %s:%u.", escaped_safe_str_client(address), port); - make_socket_reuseable(s); - if (connect(s, dest_addr, (socklen_t)dest_addr_len) < 0) { int e = tor_socket_errno(s); if (!ERRNO_IS_CONN_EINPROGRESS(e)) {