documentation update

This commit is contained in:
Arvid Norberg 2010-02-19 04:20:11 +00:00
parent c17ea2d14a
commit 421e841b81
5 changed files with 405 additions and 261 deletions

View File

@ -429,6 +429,16 @@ functions are used.</li>
</ul>
</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">full-stats</span></tt></td>
<td><ul class="first last simple">
<li><tt class="docutils literal"><span class="pre">on</span></tt> - default, collects stats for IP overhead
and DHT and trackers. This uses a little bit
extra memory for each peer and torrent.</li>
<li><tt class="docutils literal"><span class="pre">off</span></tt> - only collects the standard stats for
upload and download rate.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>The <tt class="docutils literal"><span class="pre">variant</span></tt> feature is <em>implicit</em>, which means you don't need to specify

View File

@ -55,9 +55,12 @@ enumerated on this page, please contact <a class="reference external" href="mail
<ol class="arabic">
<li><dl class="first docutils">
<dt>Testing</dt>
<dd><p class="first last">This is not just limited to finding bugs and ways to reproduce crashes, but also
<dd><p class="first">This is not just limited to finding bugs and ways to reproduce crashes, but also
sub-optimal behavior is certain scenarios and finding ways to reproduce those. Please
report any issue to the bug tracker at <a class="reference external" href="http://code.google.com/p/libtorrent/issues/entry">google code</a>.</p>
<p class="last">New features that need testing are streaming (<tt class="docutils literal"><span class="pre">set_piece_deadline()</span></tt>), the different
choking algorithms (especially the new BitTyrant choker), the disk cache options (such
as <tt class="docutils literal"><span class="pre">explicit_cache</span></tt>).</p>
</dd>
</dl>
</li>
@ -74,9 +77,11 @@ descriptions on how to configure libtorrent for various situations for instance.
</li>
<li><dl class="first docutils">
<dt>Code</dt>
<dd><p class="first last">Contributing code for new features or bug-fixes is highly welcome. If you're interested
<dd><p class="first">Contributing code for new features or bug-fixes is highly welcome. If you're interested
in adding a feature but not sure where to start, please contact the <a class="reference external" href="http://lists.sourceforge.net/lists/listinfo/libtorrent-discuss">mailing list</a> or
<tt class="docutils literal"><span class="pre">#libtorrent</span></tt> &#64; <tt class="docutils literal"><span class="pre">irc.freenode.net</span></tt>.</p>
<p class="last">New features might be better support for integrating with other services, new choking
algorithms, seeding policies, ports to new platforms etc.</p>
</dd>
</dl>
</li>

View File

@ -23,6 +23,10 @@ enumerated on this page, please contact arvid@rasterbar.com or the `mailing list
sub-optimal behavior is certain scenarios and finding ways to reproduce those. Please
report any issue to the bug tracker at `google code`_.
New features that need testing are streaming (``set_piece_deadline()``), the different
choking algorithms (especially the new BitTyrant choker), the disk cache options (such
as ``explicit_cache``).
.. _`google code`: http://code.google.com/p/libtorrent/issues/entry
2. Documentation
@ -36,3 +40,6 @@ enumerated on this page, please contact arvid@rasterbar.com or the `mailing list
in adding a feature but not sure where to start, please contact the `mailing list`_ or
``#libtorrent`` @ ``irc.freenode.net``.
New features might be better support for integrating with other services, new choking
algorithms, seeding policies, ports to new platforms etc.

View File

@ -44,258 +44,260 @@
<div class="contents topic" id="table-of-contents">
<p class="topic-title first">Table of contents</p>
<ul class="simple">
<li><a class="reference internal" href="#overview" id="id16">overview</a></li>
<li><a class="reference internal" href="#things-to-keep-in-mind" id="id17">things to keep in mind</a></li>
<li><a class="reference internal" href="#network-primitives" id="id18">network primitives</a></li>
<li><a class="reference internal" href="#session" id="id19">session</a><ul>
<li><a class="reference internal" href="#id1" id="id20">session()</a></li>
<li><a class="reference internal" href="#id2" id="id21">~session()</a></li>
<li><a class="reference internal" href="#load-state-save-state" id="id22">load_state() save_state()</a></li>
<li><a class="reference internal" href="#pause-resume-is-paused" id="id23">pause() resume() is_paused()</a></li>
<li><a class="reference internal" href="#abort" id="id24">abort()</a></li>
<li><a class="reference internal" href="#add-torrent" id="id25">add_torrent()</a></li>
<li><a class="reference internal" href="#remove-torrent" id="id26">remove_torrent()</a></li>
<li><a class="reference internal" href="#find-torrent-get-torrents" id="id27">find_torrent() get_torrents()</a></li>
<li><a class="reference internal" href="#set-upload-rate-limit-set-download-rate-limit-upload-rate-limit-download-rate-limit" id="id28">set_upload_rate_limit() set_download_rate_limit() upload_rate_limit() download_rate_limit()</a></li>
<li><a class="reference internal" href="#set-local-upload-rate-limit-set-local-download-rate-limit-local-upload-rate-limit-local-download-rate-limit" id="id29">set_local_upload_rate_limit() set_local_download_rate_limit() local_upload_rate_limit() local_download_rate_limit()</a></li>
<li><a class="reference internal" href="#set-max-uploads-set-max-connections-max-uploads-max-connections" id="id30">set_max_uploads() set_max_connections() max_uploads() max_connections()</a></li>
<li><a class="reference internal" href="#num-uploads-num-connections" id="id31">num_uploads() num_connections()</a></li>
<li><a class="reference internal" href="#set-max-half-open-connections-max-half-open-connections" id="id32">set_max_half_open_connections() max_half_open_connections()</a></li>
<li><a class="reference internal" href="#load-asnum-db-load-country-db-int-as-for-ip" id="id33">load_asnum_db() load_country_db() int as_for_ip()</a></li>
<li><a class="reference internal" href="#load-state-state" id="id34">load_state() state()</a></li>
<li><a class="reference internal" href="#set-ip-filter" id="id35">set_ip_filter()</a></li>
<li><a class="reference internal" href="#get-ip-filter" id="id36">get_ip_filter()</a></li>
<li><a class="reference internal" href="#status" id="id37">status()</a></li>
<li><a class="reference internal" href="#get-cache-status" id="id38">get_cache_status()</a></li>
<li><a class="reference internal" href="#get-cache-info" id="id39">get_cache_info()</a></li>
<li><a class="reference internal" href="#is-listening-listen-port-listen-on" id="id40">is_listening() listen_port() listen_on()</a></li>
<li><a class="reference internal" href="#set-alert-mask" id="id41">set_alert_mask()</a></li>
<li><a class="reference internal" href="#pop-alert-wait-for-alert-set-alert-queue-size-limit" id="id42">pop_alert() wait_for_alert() set_alert_queue_size_limit()</a></li>
<li><a class="reference internal" href="#add-extension" id="id43">add_extension()</a></li>
<li><a class="reference internal" href="#set-settings-set-pe-settings" id="id44">set_settings() set_pe_settings()</a></li>
<li><a class="reference internal" href="#set-peer-proxy-set-web-seed-proxy-set-tracker-proxy-set-dht-proxy" id="id45">set_peer_proxy() set_web_seed_proxy() set_tracker_proxy() set_dht_proxy()</a></li>
<li><a class="reference internal" href="#peer-proxy-web-seed-proxy-tracker-proxy-dht-proxy" id="id46">peer_proxy() web_seed_proxy() tracker_proxy() dht_proxy()</a></li>
<li><a class="reference internal" href="#set-i2p-proxy-i2p-proxy" id="id47">set_i2p_proxy() i2p_proxy()</a></li>
<li><a class="reference internal" href="#start-dht-stop-dht-set-dht-settings-dht-state-is-dht-running" id="id48">start_dht() stop_dht() set_dht_settings() dht_state() is_dht_running()</a></li>
<li><a class="reference internal" href="#add-dht-node-add-dht-router" id="id49">add_dht_node() add_dht_router()</a></li>
<li><a class="reference internal" href="#start-lsd-stop-lsd" id="id50">start_lsd() stop_lsd()</a></li>
<li><a class="reference internal" href="#start-upnp-stop-upnp" id="id51">start_upnp() stop_upnp()</a></li>
<li><a class="reference internal" href="#start-natpmp-stop-natpmp" id="id52">start_natpmp() stop_natpmp()</a></li>
<li><a class="reference internal" href="#overview" id="id18">overview</a></li>
<li><a class="reference internal" href="#things-to-keep-in-mind" id="id19">things to keep in mind</a></li>
<li><a class="reference internal" href="#network-primitives" id="id20">network primitives</a></li>
<li><a class="reference internal" href="#session" id="id21">session</a><ul>
<li><a class="reference internal" href="#id1" id="id22">session()</a></li>
<li><a class="reference internal" href="#id2" id="id23">~session()</a></li>
<li><a class="reference internal" href="#load-state-save-state" id="id24">load_state() save_state()</a></li>
<li><a class="reference internal" href="#pause-resume-is-paused" id="id25">pause() resume() is_paused()</a></li>
<li><a class="reference internal" href="#abort" id="id26">abort()</a></li>
<li><a class="reference internal" href="#add-torrent" id="id27">add_torrent()</a></li>
<li><a class="reference internal" href="#remove-torrent" id="id28">remove_torrent()</a></li>
<li><a class="reference internal" href="#find-torrent-get-torrents" id="id29">find_torrent() get_torrents()</a></li>
<li><a class="reference internal" href="#set-upload-rate-limit-set-download-rate-limit-upload-rate-limit-download-rate-limit" id="id30">set_upload_rate_limit() set_download_rate_limit() upload_rate_limit() download_rate_limit()</a></li>
<li><a class="reference internal" href="#set-local-upload-rate-limit-set-local-download-rate-limit-local-upload-rate-limit-local-download-rate-limit" id="id31">set_local_upload_rate_limit() set_local_download_rate_limit() local_upload_rate_limit() local_download_rate_limit()</a></li>
<li><a class="reference internal" href="#set-max-uploads-max-uploads" id="id32">set_max_uploads() max_uploads()</a></li>
<li><a class="reference internal" href="#set-max-connections-max-connections" id="id33">set_max_connections() max_connections()</a></li>
<li><a class="reference internal" href="#num-uploads-num-connections" id="id34">num_uploads() num_connections()</a></li>
<li><a class="reference internal" href="#set-max-half-open-connections-max-half-open-connections" id="id35">set_max_half_open_connections() max_half_open_connections()</a></li>
<li><a class="reference internal" href="#load-asnum-db-load-country-db-int-as-for-ip" id="id36">load_asnum_db() load_country_db() int as_for_ip()</a></li>
<li><a class="reference internal" href="#load-state-state" id="id37">load_state() state()</a></li>
<li><a class="reference internal" href="#set-ip-filter" id="id38">set_ip_filter()</a></li>
<li><a class="reference internal" href="#get-ip-filter" id="id39">get_ip_filter()</a></li>
<li><a class="reference internal" href="#status" id="id40">status()</a></li>
<li><a class="reference internal" href="#get-cache-status" id="id41">get_cache_status()</a></li>
<li><a class="reference internal" href="#get-cache-info" id="id42">get_cache_info()</a></li>
<li><a class="reference internal" href="#is-listening-listen-port-listen-on" id="id43">is_listening() listen_port() listen_on()</a></li>
<li><a class="reference internal" href="#set-alert-mask" id="id44">set_alert_mask()</a></li>
<li><a class="reference internal" href="#pop-alert-wait-for-alert-set-alert-queue-size-limit" id="id45">pop_alert() wait_for_alert() set_alert_queue_size_limit()</a></li>
<li><a class="reference internal" href="#add-extension" id="id46">add_extension()</a></li>
<li><a class="reference internal" href="#set-settings-set-pe-settings" id="id47">set_settings() set_pe_settings()</a></li>
<li><a class="reference internal" href="#set-peer-proxy-set-web-seed-proxy-set-tracker-proxy-set-dht-proxy" id="id48">set_peer_proxy() set_web_seed_proxy() set_tracker_proxy() set_dht_proxy()</a></li>
<li><a class="reference internal" href="#peer-proxy-web-seed-proxy-tracker-proxy-dht-proxy" id="id49">peer_proxy() web_seed_proxy() tracker_proxy() dht_proxy()</a></li>
<li><a class="reference internal" href="#set-i2p-proxy-i2p-proxy" id="id50">set_i2p_proxy() i2p_proxy()</a></li>
<li><a class="reference internal" href="#start-dht-stop-dht-set-dht-settings-dht-state-is-dht-running" id="id51">start_dht() stop_dht() set_dht_settings() dht_state() is_dht_running()</a></li>
<li><a class="reference internal" href="#add-dht-node-add-dht-router" id="id52">add_dht_node() add_dht_router()</a></li>
<li><a class="reference internal" href="#start-lsd-stop-lsd" id="id53">start_lsd() stop_lsd()</a></li>
<li><a class="reference internal" href="#start-upnp-stop-upnp" id="id54">start_upnp() stop_upnp()</a></li>
<li><a class="reference internal" href="#start-natpmp-stop-natpmp" id="id55">start_natpmp() stop_natpmp()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#entry" id="id53">entry</a><ul>
<li><a class="reference internal" href="#integer-string-list-dict-type" id="id54">integer() string() list() dict() type()</a></li>
<li><a class="reference internal" href="#operator" id="id55">operator[]</a></li>
<li><a class="reference internal" href="#find-key" id="id56">find_key()</a></li>
<li><a class="reference internal" href="#entry" id="id56">entry</a><ul>
<li><a class="reference internal" href="#integer-string-list-dict-type" id="id57">integer() string() list() dict() type()</a></li>
<li><a class="reference internal" href="#operator" id="id58">operator[]</a></li>
<li><a class="reference internal" href="#find-key" id="id59">find_key()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#torrent-info" id="id57">torrent_info</a><ul>
<li><a class="reference internal" href="#id3" id="id58">torrent_info()</a></li>
<li><a class="reference internal" href="#add-tracker" id="id59">add_tracker()</a></li>
<li><a class="reference internal" href="#files-orig-files" id="id60">files() orig_files()</a></li>
<li><a class="reference internal" href="#remap-files" id="id61">remap_files()</a></li>
<li><a class="reference internal" href="#rename-file" id="id62">rename_file()</a></li>
<li><a class="reference internal" href="#begin-files-end-files-rbegin-files-rend-files" id="id63">begin_files() end_files() rbegin_files() rend_files()</a></li>
<li><a class="reference internal" href="#num-files-file-at" id="id64">num_files() file_at()</a></li>
<li><a class="reference internal" href="#map-block" id="id65">map_block()</a></li>
<li><a class="reference internal" href="#map-file" id="id66">map_file()</a></li>
<li><a class="reference internal" href="#url-seeds-add-url-seed-http-seeds-add-http-seed" id="id67">url_seeds() add_url_seed() http_seeds() add_http_seed()</a></li>
<li><a class="reference internal" href="#trackers" id="id68">trackers()</a></li>
<li><a class="reference internal" href="#total-size-piece-length-piece-size-num-pieces" id="id69">total_size() piece_length() piece_size() num_pieces()</a></li>
<li><a class="reference internal" href="#hash-for-piece-hash-for-piece-ptr-info-hash" id="id70">hash_for_piece() hash_for_piece_ptr() info_hash()</a></li>
<li><a class="reference internal" href="#name-comment-creation-date-creator" id="id71">name() comment() creation_date() creator()</a></li>
<li><a class="reference internal" href="#priv" id="id72">priv()</a></li>
<li><a class="reference internal" href="#nodes" id="id73">nodes()</a></li>
<li><a class="reference internal" href="#add-node" id="id74">add_node()</a></li>
<li><a class="reference internal" href="#metadata-metadata-size" id="id75">metadata() metadata_size()</a></li>
<li><a class="reference internal" href="#torrent-info" id="id60">torrent_info</a><ul>
<li><a class="reference internal" href="#id3" id="id61">torrent_info()</a></li>
<li><a class="reference internal" href="#add-tracker" id="id62">add_tracker()</a></li>
<li><a class="reference internal" href="#files-orig-files" id="id63">files() orig_files()</a></li>
<li><a class="reference internal" href="#remap-files" id="id64">remap_files()</a></li>
<li><a class="reference internal" href="#rename-file" id="id65">rename_file()</a></li>
<li><a class="reference internal" href="#begin-files-end-files-rbegin-files-rend-files" id="id66">begin_files() end_files() rbegin_files() rend_files()</a></li>
<li><a class="reference internal" href="#num-files-file-at" id="id67">num_files() file_at()</a></li>
<li><a class="reference internal" href="#map-block" id="id68">map_block()</a></li>
<li><a class="reference internal" href="#map-file" id="id69">map_file()</a></li>
<li><a class="reference internal" href="#url-seeds-add-url-seed-http-seeds-add-http-seed" id="id70">url_seeds() add_url_seed() http_seeds() add_http_seed()</a></li>
<li><a class="reference internal" href="#trackers" id="id71">trackers()</a></li>
<li><a class="reference internal" href="#total-size-piece-length-piece-size-num-pieces" id="id72">total_size() piece_length() piece_size() num_pieces()</a></li>
<li><a class="reference internal" href="#hash-for-piece-hash-for-piece-ptr-info-hash" id="id73">hash_for_piece() hash_for_piece_ptr() info_hash()</a></li>
<li><a class="reference internal" href="#name-comment-creation-date-creator" id="id74">name() comment() creation_date() creator()</a></li>
<li><a class="reference internal" href="#priv" id="id75">priv()</a></li>
<li><a class="reference internal" href="#nodes" id="id76">nodes()</a></li>
<li><a class="reference internal" href="#add-node" id="id77">add_node()</a></li>
<li><a class="reference internal" href="#metadata-metadata-size" id="id78">metadata() metadata_size()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#torrent-handle" id="id76">torrent_handle</a><ul>
<li><a class="reference internal" href="#set-piece-deadline" id="id77">set_piece_deadline()</a></li>
<li><a class="reference internal" href="#piece-availability" id="id78">piece_availability()</a></li>
<li><a class="reference internal" href="#piece-priority-prioritize-pieces-piece-priorities" id="id79">piece_priority() prioritize_pieces() piece_priorities()</a></li>
<li><a class="reference internal" href="#file-priority-prioritize-files-file-priorities" id="id80">file_priority() prioritize_files() file_priorities()</a></li>
<li><a class="reference internal" href="#file-progress" id="id81">file_progress()</a></li>
<li><a class="reference internal" href="#save-path" id="id82">save_path()</a></li>
<li><a class="reference internal" href="#move-storage" id="id83">move_storage()</a></li>
<li><a class="reference internal" href="#id5" id="id84">rename_file()</a></li>
<li><a class="reference internal" href="#get-storage-impl" id="id85">get_storage_impl()</a></li>
<li><a class="reference internal" href="#super-seeding" id="id86">super_seeding()</a></li>
<li><a class="reference internal" href="#add-piece" id="id87">add_piece()</a></li>
<li><a class="reference internal" href="#read-piece" id="id88">read_piece()</a></li>
<li><a class="reference internal" href="#force-reannounce-force-dht-announce" id="id89">force_reannounce() force_dht_announce()</a></li>
<li><a class="reference internal" href="#scrape-tracker" id="id90">scrape_tracker()</a></li>
<li><a class="reference internal" href="#connect-peer" id="id91">connect_peer()</a></li>
<li><a class="reference internal" href="#name" id="id92">name()</a></li>
<li><a class="reference internal" href="#set-ratio" id="id93">set_ratio()</a></li>
<li><a class="reference internal" href="#set-upload-limit-set-download-limit-upload-limit-download-limit" id="id94">set_upload_limit() set_download_limit() upload_limit() download_limit()</a></li>
<li><a class="reference internal" href="#set-sequential-download-is-sequential-download" id="id95">set_sequential_download() is_sequential_download()</a></li>
<li><a class="reference internal" href="#set-peer-upload-limit-set-peer-download-limit" id="id96">set_peer_upload_limit() set_peer_download_limit()</a></li>
<li><a class="reference internal" href="#id6" id="id97">pause() resume() is_paused()</a></li>
<li><a class="reference internal" href="#flush-cache" id="id98">flush_cache()</a></li>
<li><a class="reference internal" href="#force-recheck" id="id99">force_recheck()</a></li>
<li><a class="reference internal" href="#clear-error" id="id100">clear_error()</a></li>
<li><a class="reference internal" href="#set-upload-mode" id="id101">set_upload_mode()</a></li>
<li><a class="reference internal" href="#resolve-countries" id="id102">resolve_countries()</a></li>
<li><a class="reference internal" href="#is-seed" id="id103">is_seed()</a></li>
<li><a class="reference internal" href="#is-auto-managed-auto-managed" id="id104">is_auto_managed() auto_managed()</a></li>
<li><a class="reference internal" href="#has-metadata-set-metadata" id="id105">has_metadata() set_metadata()</a></li>
<li><a class="reference internal" href="#set-tracker-login" id="id106">set_tracker_login()</a></li>
<li><a class="reference internal" href="#trackers-replace-trackers-add-tracker" id="id107">trackers() replace_trackers() add_tracker()</a></li>
<li><a class="reference internal" href="#add-url-seed-remove-url-seed-url-seeds" id="id108">add_url_seed() remove_url_seed() url_seeds()</a></li>
<li><a class="reference internal" href="#add-http-seed-remove-http-seed-http-seeds" id="id109">add_http_seed() remove_http_seed() http_seeds()</a></li>
<li><a class="reference internal" href="#queue-position-queue-position-up-queue-position-down-queue-position-top-queue-position-bottom" id="id110">queue_position() queue_position_up() queue_position_down() queue_position_top() queue_position_bottom()</a></li>
<li><a class="reference internal" href="#set-priority" id="id111">set_priority()</a></li>
<li><a class="reference internal" href="#use-interface" id="id112">use_interface()</a></li>
<li><a class="reference internal" href="#info-hash" id="id113">info_hash()</a></li>
<li><a class="reference internal" href="#set-max-uploads-max-uploads-set-max-connections-max-connections" id="id114">set_max_uploads() max_uploads() set_max_connections() max_connections()</a></li>
<li><a class="reference internal" href="#save-resume-data" id="id115">save_resume_data()</a></li>
<li><a class="reference internal" href="#id7" id="id116">status()</a></li>
<li><a class="reference internal" href="#get-download-queue" id="id117">get_download_queue()</a></li>
<li><a class="reference internal" href="#get-peer-info" id="id118">get_peer_info()</a></li>
<li><a class="reference internal" href="#get-torrent-info" id="id119">get_torrent_info()</a></li>
<li><a class="reference internal" href="#is-valid" id="id120">is_valid()</a></li>
<li><a class="reference internal" href="#torrent-handle" id="id79">torrent_handle</a><ul>
<li><a class="reference internal" href="#set-piece-deadline" id="id80">set_piece_deadline()</a></li>
<li><a class="reference internal" href="#piece-availability" id="id81">piece_availability()</a></li>
<li><a class="reference internal" href="#piece-priority-prioritize-pieces-piece-priorities" id="id82">piece_priority() prioritize_pieces() piece_priorities()</a></li>
<li><a class="reference internal" href="#file-priority-prioritize-files-file-priorities" id="id83">file_priority() prioritize_files() file_priorities()</a></li>
<li><a class="reference internal" href="#file-progress" id="id84">file_progress()</a></li>
<li><a class="reference internal" href="#save-path" id="id85">save_path()</a></li>
<li><a class="reference internal" href="#move-storage" id="id86">move_storage()</a></li>
<li><a class="reference internal" href="#id5" id="id87">rename_file()</a></li>
<li><a class="reference internal" href="#get-storage-impl" id="id88">get_storage_impl()</a></li>
<li><a class="reference internal" href="#super-seeding" id="id89">super_seeding()</a></li>
<li><a class="reference internal" href="#add-piece" id="id90">add_piece()</a></li>
<li><a class="reference internal" href="#read-piece" id="id91">read_piece()</a></li>
<li><a class="reference internal" href="#force-reannounce-force-dht-announce" id="id92">force_reannounce() force_dht_announce()</a></li>
<li><a class="reference internal" href="#scrape-tracker" id="id93">scrape_tracker()</a></li>
<li><a class="reference internal" href="#connect-peer" id="id94">connect_peer()</a></li>
<li><a class="reference internal" href="#name" id="id95">name()</a></li>
<li><a class="reference internal" href="#set-ratio" id="id96">set_ratio()</a></li>
<li><a class="reference internal" href="#set-upload-limit-set-download-limit-upload-limit-download-limit" id="id97">set_upload_limit() set_download_limit() upload_limit() download_limit()</a></li>
<li><a class="reference internal" href="#set-sequential-download-is-sequential-download" id="id98">set_sequential_download() is_sequential_download()</a></li>
<li><a class="reference internal" href="#set-peer-upload-limit-set-peer-download-limit" id="id99">set_peer_upload_limit() set_peer_download_limit()</a></li>
<li><a class="reference internal" href="#id6" id="id100">pause() resume() is_paused()</a></li>
<li><a class="reference internal" href="#flush-cache" id="id101">flush_cache()</a></li>
<li><a class="reference internal" href="#force-recheck" id="id102">force_recheck()</a></li>
<li><a class="reference internal" href="#clear-error" id="id103">clear_error()</a></li>
<li><a class="reference internal" href="#set-upload-mode" id="id104">set_upload_mode()</a></li>
<li><a class="reference internal" href="#resolve-countries" id="id105">resolve_countries()</a></li>
<li><a class="reference internal" href="#is-seed" id="id106">is_seed()</a></li>
<li><a class="reference internal" href="#is-auto-managed-auto-managed" id="id107">is_auto_managed() auto_managed()</a></li>
<li><a class="reference internal" href="#has-metadata-set-metadata" id="id108">has_metadata() set_metadata()</a></li>
<li><a class="reference internal" href="#set-tracker-login" id="id109">set_tracker_login()</a></li>
<li><a class="reference internal" href="#trackers-replace-trackers-add-tracker" id="id110">trackers() replace_trackers() add_tracker()</a></li>
<li><a class="reference internal" href="#add-url-seed-remove-url-seed-url-seeds" id="id111">add_url_seed() remove_url_seed() url_seeds()</a></li>
<li><a class="reference internal" href="#add-http-seed-remove-http-seed-http-seeds" id="id112">add_http_seed() remove_http_seed() http_seeds()</a></li>
<li><a class="reference internal" href="#queue-position-queue-position-up-queue-position-down-queue-position-top-queue-position-bottom" id="id113">queue_position() queue_position_up() queue_position_down() queue_position_top() queue_position_bottom()</a></li>
<li><a class="reference internal" href="#set-priority" id="id114">set_priority()</a></li>
<li><a class="reference internal" href="#use-interface" id="id115">use_interface()</a></li>
<li><a class="reference internal" href="#info-hash" id="id116">info_hash()</a></li>
<li><a class="reference internal" href="#id7" id="id117">set_max_uploads() max_uploads()</a></li>
<li><a class="reference internal" href="#id8" id="id118">set_max_connections() max_connections()</a></li>
<li><a class="reference internal" href="#save-resume-data" id="id119">save_resume_data()</a></li>
<li><a class="reference internal" href="#id9" id="id120">status()</a></li>
<li><a class="reference internal" href="#get-download-queue" id="id121">get_download_queue()</a></li>
<li><a class="reference internal" href="#get-peer-info" id="id122">get_peer_info()</a></li>
<li><a class="reference internal" href="#get-torrent-info" id="id123">get_torrent_info()</a></li>
<li><a class="reference internal" href="#is-valid" id="id124">is_valid()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#torrent-status" id="id121">torrent_status</a></li>
<li><a class="reference internal" href="#peer-info" id="id122">peer_info</a></li>
<li><a class="reference internal" href="#session-customization" id="id123">session customization</a><ul>
<li><a class="reference internal" href="#presets" id="id124">presets</a></li>
<li><a class="reference internal" href="#session-settings" id="id125">session_settings</a></li>
<li><a class="reference internal" href="#torrent-status" id="id125">torrent_status</a></li>
<li><a class="reference internal" href="#peer-info" id="id126">peer_info</a></li>
<li><a class="reference internal" href="#session-customization" id="id127">session customization</a><ul>
<li><a class="reference internal" href="#presets" id="id128">presets</a></li>
<li><a class="reference internal" href="#session-settings" id="id129">session_settings</a></li>
</ul>
</li>
<li><a class="reference internal" href="#pe-settings" id="id126">pe_settings</a></li>
<li><a class="reference internal" href="#proxy-settings" id="id127">proxy_settings</a></li>
<li><a class="reference internal" href="#ip-filter" id="id128">ip_filter</a><ul>
<li><a class="reference internal" href="#id10" id="id129">ip_filter()</a></li>
<li><a class="reference internal" href="#add-rule" id="id130">add_rule()</a></li>
<li><a class="reference internal" href="#access" id="id131">access()</a></li>
<li><a class="reference internal" href="#export-filter" id="id132">export_filter()</a></li>
<li><a class="reference internal" href="#pe-settings" id="id130">pe_settings</a></li>
<li><a class="reference internal" href="#proxy-settings" id="id131">proxy_settings</a></li>
<li><a class="reference internal" href="#ip-filter" id="id132">ip_filter</a><ul>
<li><a class="reference internal" href="#id12" id="id133">ip_filter()</a></li>
<li><a class="reference internal" href="#add-rule" id="id134">add_rule()</a></li>
<li><a class="reference internal" href="#access" id="id135">access()</a></li>
<li><a class="reference internal" href="#export-filter" id="id136">export_filter()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#big-number" id="id133">big_number</a></li>
<li><a class="reference internal" href="#bitfield" id="id134">bitfield</a></li>
<li><a class="reference internal" href="#hasher" id="id135">hasher</a></li>
<li><a class="reference internal" href="#fingerprint" id="id136">fingerprint</a></li>
<li><a class="reference internal" href="#upnp-and-nat-pmp" id="id137">UPnP and NAT-PMP</a><ul>
<li><a class="reference internal" href="#add-mapping" id="id138">add_mapping</a></li>
<li><a class="reference internal" href="#delete-mapping" id="id139">delete_mapping</a></li>
<li><a class="reference internal" href="#router-model" id="id140">router_model()</a></li>
<li><a class="reference internal" href="#big-number" id="id137">big_number</a></li>
<li><a class="reference internal" href="#bitfield" id="id138">bitfield</a></li>
<li><a class="reference internal" href="#hasher" id="id139">hasher</a></li>
<li><a class="reference internal" href="#fingerprint" id="id140">fingerprint</a></li>
<li><a class="reference internal" href="#upnp-and-nat-pmp" id="id141">UPnP and NAT-PMP</a><ul>
<li><a class="reference internal" href="#add-mapping" id="id142">add_mapping</a></li>
<li><a class="reference internal" href="#delete-mapping" id="id143">delete_mapping</a></li>
<li><a class="reference internal" href="#router-model" id="id144">router_model()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#free-functions" id="id141">free functions</a><ul>
<li><a class="reference internal" href="#identify-client" id="id142">identify_client()</a></li>
<li><a class="reference internal" href="#client-fingerprint" id="id143">client_fingerprint()</a></li>
<li><a class="reference internal" href="#bdecode-bencode" id="id144">bdecode() bencode()</a></li>
<li><a class="reference internal" href="#add-magnet-uri" id="id145">add_magnet_uri()</a></li>
<li><a class="reference internal" href="#make-magnet-uri" id="id146">make_magnet_uri()</a></li>
<li><a class="reference internal" href="#free-functions" id="id145">free functions</a><ul>
<li><a class="reference internal" href="#identify-client" id="id146">identify_client()</a></li>
<li><a class="reference internal" href="#client-fingerprint" id="id147">client_fingerprint()</a></li>
<li><a class="reference internal" href="#bdecode-bencode" id="id148">bdecode() bencode()</a></li>
<li><a class="reference internal" href="#add-magnet-uri" id="id149">add_magnet_uri()</a></li>
<li><a class="reference internal" href="#make-magnet-uri" id="id150">make_magnet_uri()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#alerts" id="id147">alerts</a><ul>
<li><a class="reference internal" href="#read-piece-alert" id="id148">read_piece_alert</a></li>
<li><a class="reference internal" href="#external-ip-alert" id="id149">external_ip_alert</a></li>
<li><a class="reference internal" href="#listen-failed-alert" id="id150">listen_failed_alert</a></li>
<li><a class="reference internal" href="#listen-succeeded-alert" id="id151">listen_succeeded_alert</a></li>
<li><a class="reference internal" href="#portmap-error-alert" id="id152">portmap_error_alert</a></li>
<li><a class="reference internal" href="#portmap-alert" id="id153">portmap_alert</a></li>
<li><a class="reference internal" href="#portmap-log-alert" id="id154">portmap_log_alert</a></li>
<li><a class="reference internal" href="#file-error-alert" id="id155">file_error_alert</a></li>
<li><a class="reference internal" href="#file-renamed-alert" id="id156">file_renamed_alert</a></li>
<li><a class="reference internal" href="#file-rename-failed-alert" id="id157">file_rename_failed_alert</a></li>
<li><a class="reference internal" href="#tracker-announce-alert" id="id158">tracker_announce_alert</a></li>
<li><a class="reference internal" href="#tracker-error-alert" id="id159">tracker_error_alert</a></li>
<li><a class="reference internal" href="#tracker-reply-alert" id="id160">tracker_reply_alert</a></li>
<li><a class="reference internal" href="#dht-reply-alert" id="id161">dht_reply_alert</a></li>
<li><a class="reference internal" href="#tracker-warning-alert" id="id162">tracker_warning_alert</a></li>
<li><a class="reference internal" href="#scrape-reply-alert" id="id163">scrape_reply_alert</a></li>
<li><a class="reference internal" href="#scrape-failed-alert" id="id164">scrape_failed_alert</a></li>
<li><a class="reference internal" href="#url-seed-alert" id="id165">url_seed_alert</a></li>
<li><a class="reference internal" href="#hash-failed-alert" id="id166">hash_failed_alert</a></li>
<li><a class="reference internal" href="#peer-alert" id="id167">peer_alert</a></li>
<li><a class="reference internal" href="#peer-connect-alert" id="id168">peer_connect_alert</a></li>
<li><a class="reference internal" href="#peer-ban-alert" id="id169">peer_ban_alert</a></li>
<li><a class="reference internal" href="#peer-snubbed-alert" id="id170">peer_snubbed_alert</a></li>
<li><a class="reference internal" href="#peer-unsnubbed-alert" id="id171">peer_unsnubbed_alert</a></li>
<li><a class="reference internal" href="#peer-error-alert" id="id172">peer_error_alert</a></li>
<li><a class="reference internal" href="#peer-connected-alert" id="id173">peer_connected_alert</a></li>
<li><a class="reference internal" href="#peer-disconnected-alert" id="id174">peer_disconnected_alert</a></li>
<li><a class="reference internal" href="#invalid-request-alert" id="id175">invalid_request_alert</a></li>
<li><a class="reference internal" href="#request-dropped-alert" id="id176">request_dropped_alert</a></li>
<li><a class="reference internal" href="#block-timeout-alert" id="id177">block_timeout_alert</a></li>
<li><a class="reference internal" href="#block-finished-alert" id="id178">block_finished_alert</a></li>
<li><a class="reference internal" href="#file-completed-alert" id="id179">file_completed_alert</a></li>
<li><a class="reference internal" href="#block-downloading-alert" id="id180">block_downloading_alert</a></li>
<li><a class="reference internal" href="#unwanted-block-alert" id="id181">unwanted_block_alert</a></li>
<li><a class="reference internal" href="#torrent-delete-failed-alert" id="id182">torrent_delete_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-deleted-alert" id="id183">torrent_deleted_alert</a></li>
<li><a class="reference internal" href="#torrent-finished-alert" id="id184">torrent_finished_alert</a></li>
<li><a class="reference internal" href="#performance-alert" id="id185">performance_alert</a></li>
<li><a class="reference internal" href="#state-changed-alert" id="id186">state_changed_alert</a></li>
<li><a class="reference internal" href="#metadata-failed-alert" id="id187">metadata_failed_alert</a></li>
<li><a class="reference internal" href="#metadata-received-alert" id="id188">metadata_received_alert</a></li>
<li><a class="reference internal" href="#fastresume-rejected-alert" id="id189">fastresume_rejected_alert</a></li>
<li><a class="reference internal" href="#peer-blocked-alert" id="id190">peer_blocked_alert</a></li>
<li><a class="reference internal" href="#storage-moved-alert" id="id191">storage_moved_alert</a></li>
<li><a class="reference internal" href="#storage-moved-failed-alert" id="id192">storage_moved_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-paused-alert" id="id193">torrent_paused_alert</a></li>
<li><a class="reference internal" href="#torrent-resumed-alert" id="id194">torrent_resumed_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-alert" id="id195">save_resume_data_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-failed-alert" id="id196">save_resume_data_failed_alert</a></li>
<li><a class="reference internal" href="#stats-alert" id="id197">stats_alert</a></li>
<li><a class="reference internal" href="#cache-flushed-alert" id="id198">cache_flushed_alert</a></li>
<li><a class="reference internal" href="#dht-announce-alert" id="id199">dht_announce_alert</a></li>
<li><a class="reference internal" href="#dht-get-peers-alert" id="id200">dht_get_peers_alert</a></li>
<li><a class="reference internal" href="#dispatcher" id="id201">dispatcher</a></li>
<li><a class="reference internal" href="#alerts" id="id151">alerts</a><ul>
<li><a class="reference internal" href="#read-piece-alert" id="id152">read_piece_alert</a></li>
<li><a class="reference internal" href="#external-ip-alert" id="id153">external_ip_alert</a></li>
<li><a class="reference internal" href="#listen-failed-alert" id="id154">listen_failed_alert</a></li>
<li><a class="reference internal" href="#listen-succeeded-alert" id="id155">listen_succeeded_alert</a></li>
<li><a class="reference internal" href="#portmap-error-alert" id="id156">portmap_error_alert</a></li>
<li><a class="reference internal" href="#portmap-alert" id="id157">portmap_alert</a></li>
<li><a class="reference internal" href="#portmap-log-alert" id="id158">portmap_log_alert</a></li>
<li><a class="reference internal" href="#file-error-alert" id="id159">file_error_alert</a></li>
<li><a class="reference internal" href="#file-renamed-alert" id="id160">file_renamed_alert</a></li>
<li><a class="reference internal" href="#file-rename-failed-alert" id="id161">file_rename_failed_alert</a></li>
<li><a class="reference internal" href="#tracker-announce-alert" id="id162">tracker_announce_alert</a></li>
<li><a class="reference internal" href="#tracker-error-alert" id="id163">tracker_error_alert</a></li>
<li><a class="reference internal" href="#tracker-reply-alert" id="id164">tracker_reply_alert</a></li>
<li><a class="reference internal" href="#dht-reply-alert" id="id165">dht_reply_alert</a></li>
<li><a class="reference internal" href="#tracker-warning-alert" id="id166">tracker_warning_alert</a></li>
<li><a class="reference internal" href="#scrape-reply-alert" id="id167">scrape_reply_alert</a></li>
<li><a class="reference internal" href="#scrape-failed-alert" id="id168">scrape_failed_alert</a></li>
<li><a class="reference internal" href="#url-seed-alert" id="id169">url_seed_alert</a></li>
<li><a class="reference internal" href="#hash-failed-alert" id="id170">hash_failed_alert</a></li>
<li><a class="reference internal" href="#peer-alert" id="id171">peer_alert</a></li>
<li><a class="reference internal" href="#peer-connect-alert" id="id172">peer_connect_alert</a></li>
<li><a class="reference internal" href="#peer-ban-alert" id="id173">peer_ban_alert</a></li>
<li><a class="reference internal" href="#peer-snubbed-alert" id="id174">peer_snubbed_alert</a></li>
<li><a class="reference internal" href="#peer-unsnubbed-alert" id="id175">peer_unsnubbed_alert</a></li>
<li><a class="reference internal" href="#peer-error-alert" id="id176">peer_error_alert</a></li>
<li><a class="reference internal" href="#peer-connected-alert" id="id177">peer_connected_alert</a></li>
<li><a class="reference internal" href="#peer-disconnected-alert" id="id178">peer_disconnected_alert</a></li>
<li><a class="reference internal" href="#invalid-request-alert" id="id179">invalid_request_alert</a></li>
<li><a class="reference internal" href="#request-dropped-alert" id="id180">request_dropped_alert</a></li>
<li><a class="reference internal" href="#block-timeout-alert" id="id181">block_timeout_alert</a></li>
<li><a class="reference internal" href="#block-finished-alert" id="id182">block_finished_alert</a></li>
<li><a class="reference internal" href="#file-completed-alert" id="id183">file_completed_alert</a></li>
<li><a class="reference internal" href="#block-downloading-alert" id="id184">block_downloading_alert</a></li>
<li><a class="reference internal" href="#unwanted-block-alert" id="id185">unwanted_block_alert</a></li>
<li><a class="reference internal" href="#torrent-delete-failed-alert" id="id186">torrent_delete_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-deleted-alert" id="id187">torrent_deleted_alert</a></li>
<li><a class="reference internal" href="#torrent-finished-alert" id="id188">torrent_finished_alert</a></li>
<li><a class="reference internal" href="#performance-alert" id="id189">performance_alert</a></li>
<li><a class="reference internal" href="#state-changed-alert" id="id190">state_changed_alert</a></li>
<li><a class="reference internal" href="#metadata-failed-alert" id="id191">metadata_failed_alert</a></li>
<li><a class="reference internal" href="#metadata-received-alert" id="id192">metadata_received_alert</a></li>
<li><a class="reference internal" href="#fastresume-rejected-alert" id="id193">fastresume_rejected_alert</a></li>
<li><a class="reference internal" href="#peer-blocked-alert" id="id194">peer_blocked_alert</a></li>
<li><a class="reference internal" href="#storage-moved-alert" id="id195">storage_moved_alert</a></li>
<li><a class="reference internal" href="#storage-moved-failed-alert" id="id196">storage_moved_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-paused-alert" id="id197">torrent_paused_alert</a></li>
<li><a class="reference internal" href="#torrent-resumed-alert" id="id198">torrent_resumed_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-alert" id="id199">save_resume_data_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-failed-alert" id="id200">save_resume_data_failed_alert</a></li>
<li><a class="reference internal" href="#stats-alert" id="id201">stats_alert</a></li>
<li><a class="reference internal" href="#cache-flushed-alert" id="id202">cache_flushed_alert</a></li>
<li><a class="reference internal" href="#dht-announce-alert" id="id203">dht_announce_alert</a></li>
<li><a class="reference internal" href="#dht-get-peers-alert" id="id204">dht_get_peers_alert</a></li>
<li><a class="reference internal" href="#dispatcher" id="id205">dispatcher</a></li>
</ul>
</li>
<li><a class="reference internal" href="#exceptions" id="id202">exceptions</a><ul>
<li><a class="reference internal" href="#libtorrent-exception" id="id203">libtorrent_exception</a></li>
<li><a class="reference internal" href="#exceptions" id="id206">exceptions</a><ul>
<li><a class="reference internal" href="#libtorrent-exception" id="id207">libtorrent_exception</a></li>
</ul>
</li>
<li><a class="reference internal" href="#error-code" id="id204">error_code</a><ul>
<li><a class="reference internal" href="#translating-error-codes" id="id205">translating error codes</a></li>
<li><a class="reference internal" href="#error-code" id="id208">error_code</a><ul>
<li><a class="reference internal" href="#translating-error-codes" id="id209">translating error codes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#storage-interface" id="id206">storage_interface</a><ul>
<li><a class="reference internal" href="#initialize" id="id207">initialize()</a></li>
<li><a class="reference internal" href="#has-any-file" id="id208">has_any_file()</a></li>
<li><a class="reference internal" href="#readv-writev" id="id209">readv() writev()</a></li>
<li><a class="reference internal" href="#sparse-end" id="id210">sparse_end()</a></li>
<li><a class="reference internal" href="#id12" id="id211">move_storage()</a></li>
<li><a class="reference internal" href="#verify-resume-data" id="id212">verify_resume_data()</a></li>
<li><a class="reference internal" href="#write-resume-data" id="id213">write_resume_data()</a></li>
<li><a class="reference internal" href="#move-slot" id="id214">move_slot()</a></li>
<li><a class="reference internal" href="#swap-slots" id="id215">swap_slots()</a></li>
<li><a class="reference internal" href="#swap-slots3" id="id216">swap_slots3()</a></li>
<li><a class="reference internal" href="#id13" id="id217">rename_file()</a></li>
<li><a class="reference internal" href="#release-files" id="id218">release_files()</a></li>
<li><a class="reference internal" href="#delete-files" id="id219">delete_files()</a></li>
<li><a class="reference internal" href="#finalize-file" id="id220">finalize_file()</a></li>
<li><a class="reference internal" href="#storage-interface" id="id210">storage_interface</a><ul>
<li><a class="reference internal" href="#initialize" id="id211">initialize()</a></li>
<li><a class="reference internal" href="#has-any-file" id="id212">has_any_file()</a></li>
<li><a class="reference internal" href="#readv-writev" id="id213">readv() writev()</a></li>
<li><a class="reference internal" href="#sparse-end" id="id214">sparse_end()</a></li>
<li><a class="reference internal" href="#id14" id="id215">move_storage()</a></li>
<li><a class="reference internal" href="#verify-resume-data" id="id216">verify_resume_data()</a></li>
<li><a class="reference internal" href="#write-resume-data" id="id217">write_resume_data()</a></li>
<li><a class="reference internal" href="#move-slot" id="id218">move_slot()</a></li>
<li><a class="reference internal" href="#swap-slots" id="id219">swap_slots()</a></li>
<li><a class="reference internal" href="#swap-slots3" id="id220">swap_slots3()</a></li>
<li><a class="reference internal" href="#id15" id="id221">rename_file()</a></li>
<li><a class="reference internal" href="#release-files" id="id222">release_files()</a></li>
<li><a class="reference internal" href="#delete-files" id="id223">delete_files()</a></li>
<li><a class="reference internal" href="#finalize-file" id="id224">finalize_file()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#magnet-links" id="id221">magnet links</a></li>
<li><a class="reference internal" href="#queuing" id="id222">queuing</a><ul>
<li><a class="reference internal" href="#downloading" id="id223">downloading</a></li>
<li><a class="reference internal" href="#seeding" id="id224">seeding</a></li>
<li><a class="reference internal" href="#magnet-links" id="id225">magnet links</a></li>
<li><a class="reference internal" href="#queuing" id="id226">queuing</a><ul>
<li><a class="reference internal" href="#downloading" id="id227">downloading</a></li>
<li><a class="reference internal" href="#seeding" id="id228">seeding</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fast-resume" id="id225">fast resume</a><ul>
<li><a class="reference internal" href="#file-format" id="id226">file format</a></li>
<li><a class="reference internal" href="#fast-resume" id="id229">fast resume</a><ul>
<li><a class="reference internal" href="#file-format" id="id230">file format</a></li>
</ul>
</li>
<li><a class="reference internal" href="#threads" id="id227">threads</a></li>
<li><a class="reference internal" href="#storage-allocation" id="id228">storage allocation</a><ul>
<li><a class="reference internal" href="#sparse-allocation" id="id229">sparse allocation</a></li>
<li><a class="reference internal" href="#full-allocation" id="id230">full allocation</a></li>
<li><a class="reference internal" href="#compact-allocation" id="id231">compact allocation</a></li>
<li><a class="reference internal" href="#threads" id="id231">threads</a></li>
<li><a class="reference internal" href="#storage-allocation" id="id232">storage allocation</a><ul>
<li><a class="reference internal" href="#sparse-allocation" id="id233">sparse allocation</a></li>
<li><a class="reference internal" href="#full-allocation" id="id234">full allocation</a></li>
<li><a class="reference internal" href="#compact-allocation" id="id235">compact allocation</a></li>
</ul>
</li>
<li><a class="reference internal" href="#extensions" id="id232">extensions</a><ul>
<li><a class="reference internal" href="#metadata-from-peers" id="id233">metadata from peers</a></li>
<li><a class="reference internal" href="#http-seeding" id="id234">HTTP seeding</a></li>
<li><a class="reference internal" href="#extensions" id="id236">extensions</a><ul>
<li><a class="reference internal" href="#metadata-from-peers" id="id237">metadata from peers</a></li>
<li><a class="reference internal" href="#http-seeding" id="id238">HTTP seeding</a></li>
</ul>
</li>
<li><a class="reference internal" href="#filename-checks" id="id235">filename checks</a></li>
<li><a class="reference internal" href="#filename-checks" id="id239">filename checks</a></li>
</ul>
</div>
<div class="section" id="overview">
@ -797,24 +799,33 @@ but can be useful in case you want to treat local peers preferentially, but not
quite unthrottled.</p>
<p>A rate limit of 0 means infinite.</p>
</div>
<div class="section" id="set-max-uploads-set-max-connections-max-uploads-max-connections">
<h2>set_max_uploads() set_max_connections() max_uploads() max_connections()</h2>
<div class="section" id="set-max-uploads-max-uploads">
<h2>set_max_uploads() max_uploads()</h2>
<blockquote>
<pre class="literal-block">
void set_max_uploads(int limit);
void set_max_connections(int limit);
int max_uploads() const;
</pre>
</blockquote>
<p><tt class="docutils literal"><span class="pre">set_max_uploads</span></tt> sets a global limit on the number of unchoked peers (uploads).
The number of uploads is at least one per torrent.</p>
<p><tt class="docutils literal"><span class="pre">max_uploads()</span></tt> returns the current settings.</p>
<p>The number of unchoke slots may be ignored depending on what
<tt class="docutils literal"><span class="pre">session_settings::choking_algorithm</span></tt> is set to.</p>
</div>
<div class="section" id="set-max-connections-max-connections">
<h2>set_max_connections() max_connections()</h2>
<blockquote>
<pre class="literal-block">
void set_max_connections(int limit);
int max_connections() const;
</pre>
</blockquote>
<p>These functions will set a global limit on the number of unchoked peers (uploads)
and the number of connections opened. The number of connections is set to a hard
minimum of at least two connections per torrent, so if you set a too low
connections limit, and open too many torrents, the limit will not be met. The
number of uploads is at least one per torrent.</p>
<p><tt class="docutils literal"><span class="pre">max_uploads()</span></tt> and <tt class="docutils literal"><span class="pre">max_connections()</span></tt> returns the current settings.</p>
<p>The number of unchoke slots may be ignored. In order to make this setting
take effect, disable <tt class="docutils literal"><span class="pre">session_settings::auto_upload_slots_rate_based</span></tt>.</p>
<p><tt class="docutils literal"><span class="pre">set_max_connections</span></tt> sets a global limit on the number of connections
opened. The number of connections is set to a hard minimum of at least two per
torrent, so if you set a too low connections limit, and open too many torrents,
the limit will not be met.</p>
<p><tt class="docutils literal"><span class="pre">max_connections()</span></tt> returns the current settings.</p>
</div>
<div class="section" id="num-uploads-num-connections">
<h2>num_uploads() num_connections()</h2>
@ -2698,6 +2709,8 @@ A high number gives more bandwidth. The priority must be within the range [0, 25
consume, even if there's is more quota. Other peers will still be weighed in when
bandwidth is being distributed. With other words, bandwidth is not distributed strictly
in order of priority, but the priority is used as a weight.</p>
<p>Torrents with higher priority are also more likely to have its peers unchoked, to
distribute more upload capacity to them.</p>
</div>
<div class="section" id="use-interface">
<h2>use_interface()</h2>
@ -2720,23 +2733,31 @@ sha1_hash info_hash() const;
</blockquote>
<p><tt class="docutils literal"><span class="pre">info_hash()</span></tt> returns the info-hash for the torrent.</p>
</div>
<div class="section" id="set-max-uploads-max-uploads-set-max-connections-max-connections">
<h2>set_max_uploads() max_uploads() set_max_connections() max_connections()</h2>
<div class="section" id="id7">
<h2>set_max_uploads() max_uploads()</h2>
<blockquote>
<pre class="literal-block">
void set_max_uploads(int max_uploads) const;
int max_uploads() const;
void set_max_connections(int max_connections) const;
int max_connections() const;
</pre>
</blockquote>
<p><tt class="docutils literal"><span class="pre">set_max_uploads()</span></tt> sets the maximum number of peers that's unchoked at the same time on this
torrent. If you set this to -1, there will be no limit.</p>
<p><tt class="docutils literal"><span class="pre">max_uploads()</span></tt> returns the current settings.</p>
</div>
<div class="section" id="id8">
<h2>set_max_connections() max_connections()</h2>
<blockquote>
<pre class="literal-block">
void set_max_connections(int max_connections) const;
int max_connections() const;
</pre>
</blockquote>
<p><tt class="docutils literal"><span class="pre">set_max_connections()</span></tt> sets the maximum number of connection this torrent will open. If all
connections are used up, incoming connections may be refused or poor connections may be closed.
This must be at least 2. The default is unlimited number of connections. If -1 is given to the
function, it means unlimited.</p>
<p><tt class="docutils literal"><span class="pre">max_uploads()</span></tt> and <tt class="docutils literal"><span class="pre">max_connections()</span></tt> returns the current settings.</p>
<p><tt class="docutils literal"><span class="pre">max_connections()</span></tt> returns the current settings.</p>
</div>
<div class="section" id="save-resume-data">
<h2>save_resume_data()</h2>
@ -2833,7 +2854,7 @@ while (num_resume_data &gt; 0)
}
</pre>
</div>
<div class="section" id="id7">
<div class="section" id="id9">
<h2>status()</h2>
<blockquote>
<pre class="literal-block">
@ -3648,8 +3669,22 @@ struct session_settings
bool free_torrent_hashes;
bool upnp_ignore_nonrouters;
int send_buffer_watermark;
#ifndef TORRENT_NO_DEPRECATE
bool auto_upload_slots;
bool auto_upload_slots_rate_based;
#endif
enum choking_algorithm_t
{
fixed_slots_choker,
auto_expand_choker,
rate_based_choker,
bittyrant_choker
};
int choking_algorithm;
bool use_parole_mode;
int cache_size;
int cache_buffer_chunk_size;
@ -3722,11 +3757,21 @@ struct session_settings
bool low_prio_disk;
int local_service_announce_interval;
int dht_announce_interval;
int udp_tracker_token_expiry;
bool volatile_read_cache;
bool guided_read_cache;
bool default_min_cache_age;
int num_optimistic_unchoke_slots;
bool no_atime_storage;
int default_est_reciprocation_rate;
int increase_est_reciprocation_rate;
int decrease_est_reciprocation_rate;
bool incoming_starts_queued_torrents;
bool report_true_downloaded;
bool strict_end_game_mode;
};
</pre>
<p><tt class="docutils literal"><span class="pre">user_agent</span></tt> this is the client identification to the tracker.
@ -3811,8 +3856,9 @@ connection may delay the connection of other peers considerably.</p>
<p><tt class="docutils literal"><span class="pre">ignore_limits_on_local_network</span></tt>, if set to true, upload, download and
unchoke limits are ignored for peers on the local network.</p>
<p><tt class="docutils literal"><span class="pre">connection_speed</span></tt> is the number of connection attempts that
are made per second. If a number &lt;= 0 is specified, it will default to
200 connections per second.</p>
are made per second. If a number &lt; 0 is specified, it will default to
200 connections per second. If 0 is specified, it means don't make
outgoing connections at all.</p>
<p><tt class="docutils literal"><span class="pre">send_redundant_have</span></tt> controls if have messages will be sent
to peers that already have the piece. This is typically not necessary,
but it might be necessary for collecting statistics in some cases.
@ -3890,6 +3936,28 @@ current number of upload slots, see <tt class="docutils literal"><span class="pr
the max upload slots setting is used as a minimum number of unchoked slots.
This algorithm is designed to prevent the peer from spreading its upload
capacity too thin, but still open more slots in order to utilize the full capacity.</p>
<p><tt class="docutils literal"><span class="pre">choking_algorithm</span></tt> specifies which algorithm to use to determine which peers
to unchoke. This setting replaces the deprecated settings <tt class="docutils literal"><span class="pre">auto_upload_slots</span></tt>
and <tt class="docutils literal"><span class="pre">auto_upload_slots_rate_based</span></tt>.</p>
<p>The options for choking algorithms are:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">fixed_slots_choker</span></tt> is the traditional choker with a fixed number of unchoke
slots (as specified by <tt class="docutils literal"><span class="pre">session::set_max_uploads()</span></tt>).</li>
<li><tt class="docutils literal"><span class="pre">auto_expand_choker</span></tt> opens at least the number of slots as specified by
<tt class="docutils literal"><span class="pre">session::set_max_uploads()</span></tt> but opens up more slots if the upload capacity
is not saturated. This unchoker will work just like the <tt class="docutils literal"><span class="pre">fixed_slot_choker</span></tt>
if there's no global upload rate limit set.</li>
<li><tt class="docutils literal"><span class="pre">rate_based_choker</span></tt> opens up unchoke slots based on the upload rate
achieved to peers. The more slots that are opened, the marginal upload
rate required to open up another slot increases.</li>
<li><tt class="docutils literal"><span class="pre">bittyrant_choker</span></tt> attempts to optimize download rate by finding the
reciprocation rate of each peer individually and prefers peers that gives
the highest <em>return on investment</em>. It still allocates all upload capacity,
but shuffles it around to the best peers first. For this choker to be
efficient, you need to set a global upload rate limit
(<tt class="docutils literal"><span class="pre">session::set_upload_rate_limit()</span></tt>). For more information about this
choker, see the <a class="reference external" href="http://bittyrant.cs.washington.edu/#papers">paper</a>.</li>
</ul>
<p><tt class="docutils literal"><span class="pre">use_parole_mode</span></tt> specifies if parole mode should be used. Parole mode means
that peers that participate in pieces that fail the hash check are put in a mode
where they are only allowed to download whole pieces. If the whole piece a peer
@ -4112,6 +4180,15 @@ be desirable.</p>
network announces for a torrent. By default, when local service
discovery is enabled a torrent announces itself every 5 minutes.
This interval is specified in seconds.</p>
<p><tt class="docutils literal"><span class="pre">dht_announce_interval</span></tt> is the number of seconds between announcing
torrents to the distributed hash table (DHT). This is specified to
be 15 minutes which is its default.</p>
<p><tt class="docutils literal"><span class="pre">udp_tracker_token_expiry</span></tt> is the number of seconds libtorrent
will keep UDP tracker connection tokens around for. This is specified
to be 60 seconds, and defaults to that. The higher this value is, the
fewer packets have to be sent to the UDP tracker. In order for higher
values to work, the tracker needs to be configured to match the
expiration time for tokens.</p>
<p><tt class="docutils literal"><span class="pre">volatile_read_cache</span></tt>, if this is set to true, read cache blocks
that are hit by peer read requests are removed from the disk cache
to free up more space. This is useful if you don't expect the disk
@ -4128,12 +4205,48 @@ may be greater if <tt class="docutils literal"><span class="pre">guided_read_cac
bound on the time a cache line stays in the cache is an attempt
to avoid swapping the same pieces in and out of the cache in case
there is a shortage of spare cache space.</p>
<p><tt class="docutils literal"><span class="pre">udp_tracker_token_expiry</span></tt> is the number of seconds libtorrent
will keep UDP tracker connection tokens around for. This is specified
to be 60 seconds, and defaults to that. The higher this value is, the
fewer packets have to be sent to the UDP tracker. In order for higher
values to work, the tracker needs to be configured to match the
expiration time for tokens.</p>
<p><tt class="docutils literal"><span class="pre">num_optimistic_unchoke_slots</span></tt> is the number of optimistic unchoke
slots to use. It defaults to 0, which means automatic. Having a higher
number of optimistic unchoke slots mean you will find the good peers
faster but with the trade-off to use up more bandwidth. When this is
set to 0, libtorrent opens up 20% of your allowed upload slots as
optimistic unchoke slots.</p>
<p><tt class="docutils literal"><span class="pre">no_atime_storage</span></tt> this is a linux-only option and passes in the
<tt class="docutils literal"><span class="pre">O_NOATIME</span></tt> to <tt class="docutils literal"><span class="pre">open()</span></tt> when opening files. This may lead to
some disk performance improvements.</p>
<p><tt class="docutils literal"><span class="pre">default_est_reciprocation_rate</span></tt> is the assumed reciprocation rate
from peers when using the BitTyrant choker. This defaults to 14 kiB/s.
If set too high, you will over-estimate your peers and be more altruistic
while finding the true reciprocation rate, if it's set too low, you'll
be too stingy and waste finding the true reciprocation rate.</p>
<p><tt class="docutils literal"><span class="pre">increase_est_reciprocation_rate</span></tt> specifies how many percent the
extimated reciprocation rate should be increased by each unchoke
interval a peer is still choking us back. This defaults to 20%.
This only applies to the BitTyrant choker.</p>
<p><tt class="docutils literal"><span class="pre">decrease_est_reciprocation_rate</span></tt> specifies how many percent the
estimated reciprocation rate should be decreased by each unchoke
interval a peer unchokes us. This default to 3%.
This only applies to the BitTyrant choker.</p>
<p><tt class="docutils literal"><span class="pre">incoming_starts_queued_torrents</span></tt> defaults to false. If a torrent
has been paused by the auto managed feature in libtorrent, i.e.
the torrent is paused and auto managed, this feature affects whether
or not it is automatically started on an incoming connection. The
main reason to queue torrents, is not to make them unavailable, but
to save on the overhead of announcing to the trackers, the DHT and to
avoid spreading one's unchoke slots too thin. If a peer managed to
find us, even though we're no in the torrent anymore, this setting
can make us start the torrent and serve it.</p>
<p>When <tt class="docutils literal"><span class="pre">report_true_downloaded</span></tt> is true, the <tt class="docutils literal"><span class="pre">&amp;downloaded=</span></tt> argument
sent to trackers will include redundant downloaded bytes. It defaults
to <tt class="docutils literal"><span class="pre">false</span></tt>, which means redundant bytes are not reported to the tracker.</p>
<p><tt class="docutils literal"><span class="pre">strict_end_game_mode</span></tt> defaults to true, and controls when a block
may be requested twice. If this is <tt class="docutils literal"><span class="pre">true</span></tt>, a block may only be requested
twice when there's ay least one request to every piece that's left to
download in the torrent. This may slow down progress on some pieces
sometimes, but it may also avoid downloading a lot of redundant bytes.
If this is <tt class="docutils literal"><span class="pre">false</span></tt>, libtorrent attempts to use each peer connection
to its max, by always requesting something, even if it means requesting
something that has been requested from another peer already.</p>
</div>
</div>
<div class="section" id="pe-settings">
@ -4282,7 +4395,7 @@ public:
};
</pre>
</blockquote>
<div class="section" id="id10">
<div class="section" id="id12">
<h2>ip_filter()</h2>
<blockquote>
<pre class="literal-block">
@ -6497,7 +6610,7 @@ int sparse_end(int start) const;
region). The purpose of this is to skip parts of files that can be known to contain
zeros when checking files.</p>
</div>
<div class="section" id="id12">
<div class="section" id="id14">
<h2>move_storage()</h2>
<blockquote>
<pre class="literal-block">
@ -6574,7 +6687,7 @@ should be moved to <tt class="docutils literal"><span class="pre">slot1</span></
<p>This is only used in compact mode.</p>
<p>Returning <tt class="docutils literal"><span class="pre">true</span></tt> indicates an error occurred.</p>
</div>
<div class="section" id="id13">
<div class="section" id="id15">
<h2>rename_file()</h2>
<blockquote>
<pre class="literal-block">

View File

@ -53,23 +53,24 @@
<li><a class="reference internal" href="#send-buffer-watermark" id="id7">send buffer watermark</a></li>
<li><a class="reference internal" href="#optimize-hashing-for-memory-usage" id="id8">optimize hashing for memory usage</a></li>
<li><a class="reference internal" href="#reduce-executable-size" id="id9">reduce executable size</a></li>
<li><a class="reference internal" href="#reduce-statistics" id="id10">reduce statistics</a></li>
</ul>
</li>
<li><a class="reference internal" href="#play-nice-with-the-disk" id="id10">play nice with the disk</a></li>
<li><a class="reference internal" href="#high-performance-seeding" id="id11">high performance seeding</a><ul>
<li><a class="reference internal" href="#file-pool" id="id12">file pool</a></li>
<li><a class="reference internal" href="#disk-cache" id="id13">disk cache</a></li>
<li><a class="reference internal" href="#send-buffer-low-watermark" id="id14">send buffer low watermark</a></li>
<li><a class="reference internal" href="#peers" id="id15">peers</a></li>
<li><a class="reference internal" href="#torrent-limits" id="id16">torrent limits</a></li>
<li><a class="reference internal" href="#play-nice-with-the-disk" id="id11">play nice with the disk</a></li>
<li><a class="reference internal" href="#high-performance-seeding" id="id12">high performance seeding</a><ul>
<li><a class="reference internal" href="#file-pool" id="id13">file pool</a></li>
<li><a class="reference internal" href="#disk-cache" id="id14">disk cache</a></li>
<li><a class="reference internal" href="#send-buffer-low-watermark" id="id15">send buffer low watermark</a></li>
<li><a class="reference internal" href="#peers" id="id16">peers</a></li>
<li><a class="reference internal" href="#torrent-limits" id="id17">torrent limits</a></li>
</ul>
</li>
<li><a class="reference internal" href="#benchmarking" id="id17">benchmarking</a><ul>
<li><a class="reference internal" href="#disk-metrics" id="id18">disk metrics</a></li>
<li><a class="reference internal" href="#session-stats" id="id19">session stats</a></li>
<li><a class="reference internal" href="#benchmarking" id="id18">benchmarking</a><ul>
<li><a class="reference internal" href="#disk-metrics" id="id19">disk metrics</a></li>
<li><a class="reference internal" href="#session-stats" id="id20">session stats</a></li>
</ul>
</li>
<li><a class="reference internal" href="#contributions" id="id20">contributions</a></li>
<li><a class="reference internal" href="#contributions" id="id21">contributions</a></li>
</ul>
</div>
<div class="section" id="tuning-libtorrent">
@ -203,6 +204,14 @@ reduce the executable size with up to 45%. In order to build without exception
support, you need to patch parts of boost.</p>
<p>Also make sure to optimize for size when compiling.</p>
</div>
<div class="section" id="reduce-statistics">
<h2>reduce statistics</h2>
<p>You can save some memory for each connection and each torrent by reducing the
number of separate rates kept track of by libtorrent. If you build with <tt class="docutils literal"><span class="pre">full-stats=off</span></tt>
(or <tt class="docutils literal"><span class="pre">-DTORRENT_DISABLE_FULL_STATS</span></tt>) you will save a few hundred bytes for each
connection and torrent. It might make a difference if you have a very large number
of peers or torrents.</p>
</div>
</div>
<div class="section" id="play-nice-with-the-disk">
<h1>play nice with the disk</h1>