forked from premiere/premiere-libtorrent
adjust piece timeouts depending on download rate limit
This commit is contained in:
parent
5de60fad78
commit
c2e39ec907
|
@ -1,3 +1,4 @@
|
||||||
|
* piece timeouts are adjusted to download rate limits
|
||||||
* encodes urls in torrent files that needs to be encoded
|
* encodes urls in torrent files that needs to be encoded
|
||||||
* fixed not passing &supportcrypto=1 when encryption is disabled
|
* fixed not passing &supportcrypto=1 when encryption is disabled
|
||||||
* introduced an upload mode, which torrents are switched into when
|
* introduced an upload mode, which torrents are switched into when
|
||||||
|
|
|
@ -3345,9 +3345,25 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int piece_timeout = m_ses.settings().piece_timeout;
|
||||||
|
int rate_limit = INT_MAX;
|
||||||
|
if (m_bandwidth_channel[download_channel].throttle() > 0)
|
||||||
|
rate_limit = (std::min)(m_bandwidth_channel[download_channel].throttle(), rate_limit);
|
||||||
|
if (t->bandwidth_throttle(download_channel) > 0)
|
||||||
|
rate_limit = (std::min)(t->bandwidth_throttle(download_channel) / t->num_peers(), rate_limit);
|
||||||
|
if (m_ses.m_download_channel.throttle() > 0)
|
||||||
|
rate_limit = (std::min)(m_ses.m_download_channel.throttle()
|
||||||
|
/ m_ses.num_connections(), rate_limit);
|
||||||
|
|
||||||
|
// rate_limit is an approximation of what this connection is
|
||||||
|
// allowed to download. If it is impossible to beat the piece
|
||||||
|
// timeout at this rate, adjust it to be realistic
|
||||||
|
|
||||||
|
int rate_limit_timeout = rate_limit / block_size;
|
||||||
|
if (piece_timeout < rate_limit_timeout) piece_timeout = rate_limit_timeout;
|
||||||
|
|
||||||
if (!m_download_queue.empty()
|
if (!m_download_queue.empty()
|
||||||
&& now - m_last_piece > seconds(m_ses.settings().piece_timeout
|
&& now - m_last_piece > seconds(piece_timeout + m_timeout_extend))
|
||||||
+ m_timeout_extend))
|
|
||||||
{
|
{
|
||||||
// this peer isn't sending the pieces we've
|
// this peer isn't sending the pieces we've
|
||||||
// requested (this has been observed by BitComet)
|
// requested (this has been observed by BitComet)
|
||||||
|
@ -3356,7 +3372,9 @@ namespace libtorrent
|
||||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
||||||
(*m_logger) << time_now_string()
|
(*m_logger) << time_now_string()
|
||||||
<< " *** PIECE_REQUESTS TIMED OUT [ " << (int)m_download_queue.size()
|
<< " *** PIECE_REQUESTS TIMED OUT [ " << (int)m_download_queue.size()
|
||||||
<< " " << total_seconds(now - m_last_piece) << "] ***\n";
|
<< " time: " << total_seconds(now - m_last_piece)
|
||||||
|
<< " to: " << piece_timeout
|
||||||
|
<< " extened: " << m_timeout_extend << " ] ***\n";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
snub_peer();
|
snub_peer();
|
||||||
|
|
Loading…
Reference in New Issue