set SO_REUSEADDR before we bind, not after

resolves bug 4950 (fixes a bug on commit aba7bb705a from #2850)
This commit is contained in:
Roger Dingledine 2012-01-23 15:54:02 -05:00
parent efb60e2132
commit 247a21379a
2 changed files with 8 additions and 2 deletions

6
changes/bug4950 Normal file
View File

@ -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.

View File

@ -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)) {