completed fast reconnect fix

This commit is contained in:
Arvid Norberg 2007-10-04 21:26:50 +00:00
parent 82369a552b
commit 2940d253c3
5 changed files with 21 additions and 4 deletions

View File

@ -375,7 +375,7 @@ namespace libtorrent
int m_sync_bytes_read; int m_sync_bytes_read;
// hold information about latest allocated send buffer // hold information about latest allocated send buffer
// need to check for non zero (begin, end) for operations with this // need to check for non zero (begin, end) for operations with this
buffer::interval m_enc_send_buffer; buffer::interval m_enc_send_buffer;
// initialized during write_pe1_2_dhkey, and destroyed on // initialized during write_pe1_2_dhkey, and destroyed on

View File

@ -176,6 +176,9 @@ namespace libtorrent
void set_non_prioritized(bool b) void set_non_prioritized(bool b)
{ m_non_prioritized = b; } { m_non_prioritized = b; }
void fast_reconnect(bool r) { m_fast_reconnect = r; }
bool fast_reconnect() const { return m_fast_reconnect; }
// this adds an announcement in the announcement queue // this adds an announcement in the announcement queue
// it will let the peer know that we have the given piece // it will let the peer know that we have the given piece
void announce_piece(int index); void announce_piece(int index);
@ -732,6 +735,13 @@ namespace libtorrent
// the number of bytes send to the disk-io // the number of bytes send to the disk-io
// thread that hasn't yet been completely written. // thread that hasn't yet been completely written.
int m_outstanding_writing_bytes; int m_outstanding_writing_bytes;
// if this is true, the disconnection
// timestamp is not updated when the connection
// is closed. This means the time until we can
// reconnect to this peer is shorter, and likely
// immediate.
bool m_fast_reconnect;
#ifndef NDEBUG #ifndef NDEBUG
public: public:

View File

@ -205,6 +205,7 @@ namespace libtorrent
// if this fails, we need to reconnect // if this fails, we need to reconnect
// fast. // fast.
pi->connected = time_now() - seconds(m_ses.settings().min_reconnect_time); pi->connected = time_now() - seconds(m_ses.settings().min_reconnect_time);
fast_reconnect(true);
write_pe1_2_dhkey(); write_pe1_2_dhkey();
m_state = read_pe_dhkey; m_state = read_pe_dhkey;
@ -380,7 +381,7 @@ namespace libtorrent
buffer::interval send_buf = allocate_send_buffer(dh_key_len + pad_size); buffer::interval send_buf = allocate_send_buffer(dh_key_len + pad_size);
std::copy (m_DH_key_exchange->get_local_key(), std::copy(m_DH_key_exchange->get_local_key(),
m_DH_key_exchange->get_local_key() + dh_key_len, m_DH_key_exchange->get_local_key() + dh_key_len,
send_buf.begin); send_buf.begin);
@ -571,7 +572,7 @@ namespace libtorrent
const sha1_hash remote_key = h.final(); const sha1_hash remote_key = h.final();
assert(!m_RC4_handler.get()); assert(!m_RC4_handler.get());
m_RC4_handler.reset (new RC4_handler (local_key, remote_key)); m_RC4_handler.reset(new RC4_handler (local_key, remote_key));
#ifdef TORRENT_VERBOSE_LOGGING #ifdef TORRENT_VERBOSE_LOGGING
(*m_logger) << " computed RC4 keys\n"; (*m_logger) << " computed RC4 keys\n";

View File

@ -119,6 +119,7 @@ namespace libtorrent
, m_remote_dl_rate(0) , m_remote_dl_rate(0)
, m_remote_dl_update(time_now()) , m_remote_dl_update(time_now())
, m_outstanding_writing_bytes(0) , m_outstanding_writing_bytes(0)
, m_fast_reconnect(false)
#ifndef NDEBUG #ifndef NDEBUG
, m_in_constructor(true) , m_in_constructor(true)
#endif #endif
@ -195,6 +196,7 @@ namespace libtorrent
, m_remote_dl_rate(0) , m_remote_dl_rate(0)
, m_remote_dl_update(time_now()) , m_remote_dl_update(time_now())
, m_outstanding_writing_bytes(0) , m_outstanding_writing_bytes(0)
, m_fast_reconnect(false)
#ifndef NDEBUG #ifndef NDEBUG
, m_in_constructor(true) , m_in_constructor(true)
#endif #endif

View File

@ -1340,7 +1340,11 @@ namespace libtorrent
p->connection = 0; p->connection = 0;
p->optimistically_unchoked = false; p->optimistically_unchoked = false;
p->connected = time_now(); // if fast reconnect is true, we won't
// update the timestamp, and it will remain
// the time when we initiated the connection.
if (!c.fast_reconnect())
p->connected = time_now();
if (c.failed()) if (c.failed())
{ {