summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2012-01-23 15:54:02 -0500
committerRoger Dingledine <arma@torproject.org>2012-01-23 15:54:02 -0500
commit247a21379af1cf90896d9818cf448d9687f6277c (patch)
tree4a20cbe265a8166b6c7b087d5c1270bb987ab761
parentefb60e21320b927213c59c4e66bbc660c1973866 (diff)
downloadtor-247a21379af1cf90896d9818cf448d9687f6277c.tar.gz
tor-247a21379af1cf90896d9818cf448d9687f6277c.zip
set SO_REUSEADDR before we bind, not after
resolves bug 4950 (fixes a bug on commit aba7bb705a6 from #2850)
-rw-r--r--changes/bug49506
-rw-r--r--src/or/connection.c4
2 files changed, 8 insertions, 2 deletions
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)) {