Это оказалось не так сложно, благо найденную когда то ссылку на патчи я себе сразу сохранил, только ссылка оказалась мертвой, но тут мне помог web.archive.org
http://web.archive.org/web/20100917225805/http://libtorrent.rakshasa.no/ticket/2307
У меня как раз текущая версия libtorrent 0.12.6, какая удача!
У меня как раз текущая версия libtorrent 0.12.6, какая удача!
Файлик надо поправить всего один и всего в 2 местах.
$ cd /usr/local/src
$ aptitude update
$ aptitude build-dep libtorrent
$ apt-get source libtorrent
$ cd libtorrent-0.12.6/
$ tar -xvzf libtorrent-0.12.6.tar.gz
# далее правка исходника src/download/chunk_selector.cc (наложение патча руками)
# затем сборка
$ dpkg-buildpackage -rfakeroot -uc -b
# сгенерилось 2 файла
# libtorrent11_0.12.6-2_amd64.deb
# libtorrent-dev_0.12.6-2_amd64.deb
# ставим
$ dpkg -i libtorrent11_0.12.6-2_amd64.debперезапустил rtorrent, скачал пробный файл
Данное изображение показывает, что торрент-клиент теперь качает файл последовательно.
SOLVED
Из дальнейших наблюдений видно, что логика закачки не стала деревянно-тупой: если начало файла недоступно, клиент не будет тупить на одном месте, ожидая доступности куска, а пойдет дальше, поставив кусок в очередь, и как только кусок станет доступен - он будет сразу скачан.
На примере видно, как начал качаться первый "оставленный на потом" кусок, и как оставлен еще один чуть позже.
http://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.en.html
на всякий случай содержимое патча
Index: chunk_selector.ccupd: для uTorrent на хабре нашлась старая статья http://habrahabr.ru/post/87632/
===================================================================
--- chunk_selector.cc (revision 1171)
+++ chunk_selector.cc (working copy)
@@ -79,7 +79,7 @@
m_sharedQueue.clear();
if (m_position == invalid_chunk)
- m_position = random() % size();
+ m_position = 0;
advance_position();
}
@@ -97,14 +97,6 @@
// set.
rak::partial_queue* queue = pc->is_seeder() ? &m_sharedQueue : pc->download_cache();
- // Randomize position on average every 16 chunks to prevent
- // inefficient distribution with a slow seed and fast peers
- // all arriving at the same position.
- if ((random() & 63) == 0) {
- m_position = random() % size();
- queue->clear();
- }
-
if (queue->is_enabled()) {
// First check the cached queue.
upd2: исходники разных версий libtorrent и rtorrent http://rtorrent.net/downloads/
Комментариев нет:
Отправить комментарий