libtorrent 2.1.0 подключает WebTorrent и меняет работу с дисками

Разработчики libtorrent выпустили версию 2.1.0 с поддержкой WebTorrent, новым механизмом дискового ввода-вывода и переходом на C++17. Релиз опубликован 9 июля 2026 года и затрагивает создателей торрент-клиентов, серверных загрузчиков и приложений, которые используют библиотеку напрямую.

libtorrent 2.1.0
libtorrent 2.1.0

WebTorrent включён в libtorrent 2.1.0 по умолчанию

Главным изменением libtorrent 2.1.0 стала встроенная поддержка WebTorrent. Эта технология позволяет обмениваться данными через WebRTC — сетевой механизм, который обычно используют браузеры для видеосвязи, голосовых звонков и прямых соединений между пользователями.

Обычный BitTorrent-клиент связывается с другими участниками через TCP или uTP. WebTorrent использует WebRTC, поэтому браузерные и классические торрент-приложения получают возможность работать в одной сети при наличии совместимой инфраструктуры. Для разработчиков это открывает сценарии, где загрузка или раздача файлов запускается прямо на веб-странице без отдельного настольного клиента.

В libtorrent 2.1.0 WebTorrent активирован при стандартной сборке. Для него добавлена зависимость Boost.JSON, а вспомогательные компоненты поставляются в репозитории как подмодули. STUN-сервер, который помогает участникам установить прямое соединение через NAT, задаётся параметром webtorrent_stun_server. По умолчанию используется stun.l.google.com:19302.

Авторы проекта отдельно предупреждают, что WebTorrent расширяет поверхность атаки: библиотека начинает обрабатывать WebRTC, SDP-предложения и дополнительные сетевые сообщения. В сборках, где браузерные пиры не нужны, функцию можно отключить:

cmake -B build -Dwebtorrent=OFF

При сборке через Boost.Build применяется параметр webtorrent=off.

Новый pread_disk_io стал стандартным дисковым backend

libtorrent 2.1.0 по умолчанию перешёл на pread_disk_io. Этот механизм работает через обычные системные вызовы preadv и pwritev, а в Windows использует их платформенные аналоги.

Предыдущая ветка 2.0 активно применяла отображение файлов в память через mmap. Такой подход хорошо показывает себя на быстрых локальных NVMe-накопителях, где задержки минимальны и операционная система эффективно управляет страницами памяти. На жёстких дисках, сетевых каталогах и FUSE-файловых системах mmap способен создавать менее предсказуемую нагрузку.

pread_disk_io разделяет операции чтения, записи и вычисления хешей между потоками. Проверка загруженных частей выполняется отдельно от непосредственного обращения к диску. Благодаря этому готовый фрагмент можно быстрее объявить доступным другим участникам раздачи, пока операционная система завершает физическую запись данных.

Старый mmap-backend остаётся доступен. Разработчики приложений смогут выбирать его для систем с локальными NVMe-дисками и сравнивать результат на своей нагрузке. Универсального победителя здесь нет: скорость зависит от накопителя, файловой системы, размера очереди и числа одновременно активных торрентов.

Переход на C++17 потребует обновить сборочную среду

Для сборки libtorrent 2.1.0 теперь нужен компилятор с поддержкой C++17. Проекты, которые до сих пор собирали библиотеку в режиме C++14, должны обновить параметры CMake, Boost.Build и настройки непрерывной интеграции.

При использовании Boost.Build стандарт C++17 выбран по умолчанию. Его можно указать явно:

b2 cxxstd=17

В новой версии библиотека активнее использует стандартные типы языка. boost::string_view заменён на std::string_view, класс entry переведён на вариантный тип стандартной библиотеки, а часть устаревшего API исключена из стандартной сборки.

Эти изменения особенно заметны авторам приложений, которые напрямую работают с C++ API libtorrent. Готовый торрент-клиент может внешне выглядеть как раньше, хотя его сборщикам придётся адаптировать код, зависимости и тесты.

API libtorrent 2.1 получил асинхронные запросы и новый интерфейс создания торрентов

Релиз добавляет асинхронные методы post_file_status() и post_file_priorities(). Они позволяют запросить состояние файлов и их приоритеты через систему уведомлений libtorrent, не блокируя основной поток приложения.

Создание torrent-файлов тоже получило новый API. Разработчики связали его с оптимизациями file_storage, чтобы приложения могли эффективнее формировать метаданные для больших наборов файлов.

Формат resume data стал компактнее. В этих данных клиент сохраняет состояние загрузки, сведения о проверенных частях и служебные параметры, чтобы после перезапуска продолжить работу без полной повторной проверки.

В add_torrent_params появились поля comment, created_by и creation_date. Параметры сессии перераспределены: session_flags перенесены в session_params. Метод remap_files() объявлен устаревшим, поскольку его прежнее поведение могло повреждать логику торрентов формата BitTorrent v2.

I2P, WebRTC и проверка входных данных получили отдельные доработки

libtorrent 2.1.0 добавляет обмен пирами через I2P PEX и повторное подключение к SAM-сессии после ошибки. В peer_info исправлено хранение адреса назначения I2P, а взаимодействие с трекерами и смешанными раздачами стало точнее.

Перед финальным выпуском разработчики добавили fuzz-тесты для компонентов WebRTC: разбора конечных точек, соединений, предложений трекера и SDP. Такие тесты передают парсерам множество повреждённых и нестандартных входных данных, чтобы находить сбои, утечки памяти и ошибки границ.

Появился лимит max_directory_depth для глубины каталогов внутри загружаемого torrent-файла. Он ограничивает обработку чрезмерно вложенных путей и помогает контролировать ресурсы при чтении недоверенных метаданных.

Версия также исправляет гонку в wait_for_alert(), ошибку завершения uTP-соединения, утечку памяти в WebRTC-потоке и проблему, способную повредить данные при записи через mmap-backend.

Торрент-клиенты перейдут на libtorrent 2.1 после адаптации сборок

Появление стабильной ветки 2.1 ещё не переводит все программы на неё автоматически. qBittorrent 5.2.3, опубликованный 7 июля 2026 года, собирался с libtorrent 1.2.20 или 2.0.13. После выхода 2.1.0 в трекере qBittorrent уже появился запрос на поддержку новой версии, где разработчики пакетов сообщили о несовместимости текущей сборки.

Похожая работа потребуется другим клиентам, Python-проектам и дистрибутивам Linux. Нужно проверить удалённые и устаревшие методы, наличие C++17, новую зависимость Boost.JSON и поведение WebTorrent при стандартной конфигурации.

Официальный релиз включает исходный код и готовые Python wheels для нескольких версий Python, Windows, macOS, glibc- и musl-дистрибутивов Linux, архитектур x86-64 и ARM64. Это упрощает тестирование Python-приложений без ручной компиляции библиотеки.

libtorrent 2.1.0 закладывает основу для браузерных пиров и разных типов хранилищ

Релиз 2.1.0 меняет сразу две важные части библиотеки: сетевое взаимодействие и работу с накопителями. WebTorrent связывает классические клиенты с WebRTC-пирами, а pread_disk_io даёт более подходящую основу для HDD, сетевых ресурсов и FUSE.

Разработчикам интеграций придётся внимательно пройти руководство по переходу и проверить собственные сборки. Пользователи готовых клиентов увидят эти возможности после того, как сопровождающие программы добавят поддержку ветки 2.1 и выпустят совместимые пакеты.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.