regenerated html documentation

This commit is contained in:
Arvid Norberg 2009-06-12 16:41:44 +00:00
parent 07bcb3545a
commit 3c18f164ab
3 changed files with 676 additions and 96 deletions

View File

@ -201,74 +201,85 @@
<li><a class="reference internal" href="#scrape-failed-alert" id="id154">scrape_failed_alert</a></li>
<li><a class="reference internal" href="#url-seed-alert" id="id155">url_seed_alert</a></li>
<li><a class="reference internal" href="#hash-failed-alert" id="id156">hash_failed_alert</a></li>
<li><a class="reference internal" href="#peer-ban-alert" id="id157">peer_ban_alert</a></li>
<li><a class="reference internal" href="#peer-error-alert" id="id158">peer_error_alert</a></li>
<li><a class="reference internal" href="#invalid-request-alert" id="id159">invalid_request_alert</a></li>
<li><a class="reference internal" href="#torrent-finished-alert" id="id160">torrent_finished_alert</a></li>
<li><a class="reference internal" href="#performance-alert" id="id161">performance_alert</a></li>
<li><a class="reference internal" href="#state-changed-alert" id="id162">state_changed_alert</a></li>
<li><a class="reference internal" href="#metadata-failed-alert" id="id163">metadata_failed_alert</a></li>
<li><a class="reference internal" href="#metadata-received-alert" id="id164">metadata_received_alert</a></li>
<li><a class="reference internal" href="#fastresume-rejected-alert" id="id165">fastresume_rejected_alert</a></li>
<li><a class="reference internal" href="#peer-blocked-alert" id="id166">peer_blocked_alert</a></li>
<li><a class="reference internal" href="#storage-moved-alert" id="id167">storage_moved_alert</a></li>
<li><a class="reference internal" href="#storage-moved-failed-alert" id="id168">storage_moved_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-paused-alert" id="id169">torrent_paused_alert</a></li>
<li><a class="reference internal" href="#torrent-resumed-alert" id="id170">torrent_resumed_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-alert" id="id171">save_resume_data_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-failed-alert" id="id172">save_resume_data_failed_alert</a></li>
<li><a class="reference internal" href="#dht-announce-alert" id="id173">dht_announce_alert</a></li>
<li><a class="reference internal" href="#dht-get-peers-alert" id="id174">dht_get_peers_alert</a></li>
<li><a class="reference internal" href="#dispatcher" id="id175">dispatcher</a></li>
<li><a class="reference internal" href="#peer-alert" id="id157">peer_alert</a></li>
<li><a class="reference internal" href="#peer-ban-alert" id="id158">peer_ban_alert</a></li>
<li><a class="reference internal" href="#peer-snubbed-alert" id="id159">peer_snubbed_alert</a></li>
<li><a class="reference internal" href="#peer-unsnubbed-alert" id="id160">peer_unsnubbed_alert</a></li>
<li><a class="reference internal" href="#peer-error-alert" id="id161">peer_error_alert</a></li>
<li><a class="reference internal" href="#peer-connected-alert" id="id162">peer_connected_alert</a></li>
<li><a class="reference internal" href="#peer-disconnected-alert" id="id163">peer_disconnected_alert</a></li>
<li><a class="reference internal" href="#invalid-request-alert" id="id164">invalid_request_alert</a></li>
<li><a class="reference internal" href="#request-dropped-alert" id="id165">request_dropped_alert</a></li>
<li><a class="reference internal" href="#block-timeout-alert" id="id166">block_timeout_alert</a></li>
<li><a class="reference internal" href="#block-finished-alert" id="id167">block_finished_alert</a></li>
<li><a class="reference internal" href="#block-downloading-alert" id="id168">block_downloading_alert</a></li>
<li><a class="reference internal" href="#unwanted-block-alert" id="id169">unwanted_block_alert</a></li>
<li><a class="reference internal" href="#torrent-delete-failed-alert" id="id170">torrent_delete_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-finished-alert" id="id171">torrent_finished_alert</a></li>
<li><a class="reference internal" href="#performance-alert" id="id172">performance_alert</a></li>
<li><a class="reference internal" href="#state-changed-alert" id="id173">state_changed_alert</a></li>
<li><a class="reference internal" href="#metadata-failed-alert" id="id174">metadata_failed_alert</a></li>
<li><a class="reference internal" href="#metadata-received-alert" id="id175">metadata_received_alert</a></li>
<li><a class="reference internal" href="#fastresume-rejected-alert" id="id176">fastresume_rejected_alert</a></li>
<li><a class="reference internal" href="#peer-blocked-alert" id="id177">peer_blocked_alert</a></li>
<li><a class="reference internal" href="#storage-moved-alert" id="id178">storage_moved_alert</a></li>
<li><a class="reference internal" href="#storage-moved-failed-alert" id="id179">storage_moved_failed_alert</a></li>
<li><a class="reference internal" href="#torrent-paused-alert" id="id180">torrent_paused_alert</a></li>
<li><a class="reference internal" href="#torrent-resumed-alert" id="id181">torrent_resumed_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-alert" id="id182">save_resume_data_alert</a></li>
<li><a class="reference internal" href="#save-resume-data-failed-alert" id="id183">save_resume_data_failed_alert</a></li>
<li><a class="reference internal" href="#dht-announce-alert" id="id184">dht_announce_alert</a></li>
<li><a class="reference internal" href="#dht-get-peers-alert" id="id185">dht_get_peers_alert</a></li>
<li><a class="reference internal" href="#dispatcher" id="id186">dispatcher</a></li>
</ul>
</li>
<li><a class="reference internal" href="#exceptions" id="id176">exceptions</a><ul>
<li><a class="reference internal" href="#libtorrent-exception" id="id177">libtorrent_exception</a></li>
<li><a class="reference internal" href="#exceptions" id="id187">exceptions</a><ul>
<li><a class="reference internal" href="#libtorrent-exception" id="id188">libtorrent_exception</a></li>
</ul>
</li>
<li><a class="reference internal" href="#error-code" id="id178">error_code</a><ul>
<li><a class="reference internal" href="#translating-error-codes" id="id179">translating error codes</a></li>
<li><a class="reference internal" href="#error-code" id="id189">error_code</a><ul>
<li><a class="reference internal" href="#translating-error-codes" id="id190">translating error codes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#storage-interface" id="id180">storage_interface</a><ul>
<li><a class="reference internal" href="#initialize" id="id181">initialize()</a></li>
<li><a class="reference internal" href="#has-any-file" id="id182">has_any_file()</a></li>
<li><a class="reference internal" href="#readv-writev" id="id183">readv() writev()</a></li>
<li><a class="reference internal" href="#sparse-end" id="id184">sparse_end()</a></li>
<li><a class="reference internal" href="#id12" id="id185">move_storage()</a></li>
<li><a class="reference internal" href="#verify-resume-data" id="id186">verify_resume_data()</a></li>
<li><a class="reference internal" href="#write-resume-data" id="id187">write_resume_data()</a></li>
<li><a class="reference internal" href="#move-slot" id="id188">move_slot()</a></li>
<li><a class="reference internal" href="#swap-slots" id="id189">swap_slots()</a></li>
<li><a class="reference internal" href="#swap-slots3" id="id190">swap_slots3()</a></li>
<li><a class="reference internal" href="#id13" id="id191">rename_file()</a></li>
<li><a class="reference internal" href="#release-files" id="id192">release_files()</a></li>
<li><a class="reference internal" href="#delete-files" id="id193">delete_files()</a></li>
<li><a class="reference internal" href="#storage-interface" id="id191">storage_interface</a><ul>
<li><a class="reference internal" href="#initialize" id="id192">initialize()</a></li>
<li><a class="reference internal" href="#has-any-file" id="id193">has_any_file()</a></li>
<li><a class="reference internal" href="#readv-writev" id="id194">readv() writev()</a></li>
<li><a class="reference internal" href="#sparse-end" id="id195">sparse_end()</a></li>
<li><a class="reference internal" href="#id12" id="id196">move_storage()</a></li>
<li><a class="reference internal" href="#verify-resume-data" id="id197">verify_resume_data()</a></li>
<li><a class="reference internal" href="#write-resume-data" id="id198">write_resume_data()</a></li>
<li><a class="reference internal" href="#move-slot" id="id199">move_slot()</a></li>
<li><a class="reference internal" href="#swap-slots" id="id200">swap_slots()</a></li>
<li><a class="reference internal" href="#swap-slots3" id="id201">swap_slots3()</a></li>
<li><a class="reference internal" href="#id13" id="id202">rename_file()</a></li>
<li><a class="reference internal" href="#release-files" id="id203">release_files()</a></li>
<li><a class="reference internal" href="#delete-files" id="id204">delete_files()</a></li>
</ul>
</li>
<li><a class="reference internal" href="#magnet-links" id="id194">magnet links</a></li>
<li><a class="reference internal" href="#queuing" id="id195">queuing</a><ul>
<li><a class="reference internal" href="#downloading" id="id196">downloading</a></li>
<li><a class="reference internal" href="#seeding" id="id197">seeding</a></li>
<li><a class="reference internal" href="#magnet-links" id="id205">magnet links</a></li>
<li><a class="reference internal" href="#queuing" id="id206">queuing</a><ul>
<li><a class="reference internal" href="#downloading" id="id207">downloading</a></li>
<li><a class="reference internal" href="#seeding" id="id208">seeding</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fast-resume" id="id198">fast resume</a><ul>
<li><a class="reference internal" href="#file-format" id="id199">file format</a></li>
<li><a class="reference internal" href="#fast-resume" id="id209">fast resume</a><ul>
<li><a class="reference internal" href="#file-format" id="id210">file format</a></li>
</ul>
</li>
<li><a class="reference internal" href="#threads" id="id200">threads</a></li>
<li><a class="reference internal" href="#storage-allocation" id="id201">storage allocation</a><ul>
<li><a class="reference internal" href="#sparse-allocation" id="id202">sparse allocation</a></li>
<li><a class="reference internal" href="#full-allocation" id="id203">full allocation</a></li>
<li><a class="reference internal" href="#compact-allocation" id="id204">compact allocation</a></li>
<li><a class="reference internal" href="#threads" id="id211">threads</a></li>
<li><a class="reference internal" href="#storage-allocation" id="id212">storage allocation</a><ul>
<li><a class="reference internal" href="#sparse-allocation" id="id213">sparse allocation</a></li>
<li><a class="reference internal" href="#full-allocation" id="id214">full allocation</a></li>
<li><a class="reference internal" href="#compact-allocation" id="id215">compact allocation</a></li>
</ul>
</li>
<li><a class="reference internal" href="#extensions" id="id205">extensions</a><ul>
<li><a class="reference internal" href="#metadata-from-peers" id="id206">metadata from peers</a></li>
<li><a class="reference internal" href="#http-seeding" id="id207">HTTP seeding</a></li>
<li><a class="reference internal" href="#extensions" id="id216">extensions</a><ul>
<li><a class="reference internal" href="#metadata-from-peers" id="id217">metadata from peers</a></li>
<li><a class="reference internal" href="#http-seeding" id="id218">HTTP seeding</a></li>
</ul>
</li>
<li><a class="reference internal" href="#filename-checks" id="id208">filename checks</a></li>
<li><a class="reference internal" href="#filename-checks" id="id219">filename checks</a></li>
</ul>
</div>
<div class="section" id="overview">
@ -3032,7 +3043,7 @@ struct peer_info
int source;
enum bw_state { bw_idle, bw_torrent, bw_global, bw_network };
enum bw_state { bw_idle, bw_limit, bw_network, bw_disk };
char read_state;
char write_state;
@ -3221,14 +3232,8 @@ defines as follows:</p>
<td>The peer is not waiting for any external events to
send or receive data.</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">bw_torrent</span></tt></td>
<td>The peer is waiting for the torrent to receive
bandwidth quota in order to forward the bandwidth
request to the global manager.</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">bw_global</span></tt></td>
<td>The peer is waiting for the global bandwidth manager
to receive more quota in order to handle the request.</td>
<tr><td><tt class="docutils literal"><span class="pre">bw_limit</span></tt></td>
<td>The peer is waiting for the rate limiter.</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">bw_network</span></tt></td>
<td>The peer has quota and is currently waiting for a
@ -3236,6 +3241,10 @@ network read or write operation to complete. This is
the state all peers are in if there are no bandwidth
limits.</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">bw_disk</span></tt></td>
<td>The peer is waiting for the disk I/O thread to catch
up writing buffers to disk before downloading more.</td>
</tr>
</tbody>
</table>
<p>The <tt class="docutils literal"><span class="pre">ip</span></tt> field is the IP-address to this peer. The type is an asio endpoint. For
@ -3391,7 +3400,7 @@ struct session_settings
int num_want;
int initial_picker_threshold;
int allowed_fast_set_size;
int max_outstanding_disk_bytes_per_connection;
int max_queued_disk_bytes;
int handshake_timeout;
bool use_dht_as_fallback;
bool free_torrent_hashes;
@ -3457,6 +3466,8 @@ struct session_settings
int read_cache_line_size;
int write_cache_line_size;
bool adjust_priority_on_disk_failure;
};
</pre>
<p><tt class="docutils literal"><span class="pre">user_agent</span></tt> this is the client identification to the tracker.
@ -3571,10 +3582,12 @@ pieces in any torrent are picked at random, the following pieces are picked
in rarest first order.</p>
<p><tt class="docutils literal"><span class="pre">allowed_fast_set_size</span></tt> is the number of pieces we allow peers to download
from us without being unchoked.</p>
<p><tt class="docutils literal"><span class="pre">max_outstanding_disk_bytes_per_connection</span></tt> is the number of bytes each
connection is allowed to have waiting in the disk I/O queue before it is
throttled back. This limit is meant to stop fast internet connections to
queue up bufferes indefinitely on slow hard-drives or storage.</p>
<p><tt class="docutils literal"><span class="pre">max_queued_disk_bytes</span></tt> is the number maximum number of bytes, to be
written to disk, that can wait in the disk I/O thread queue. This queue
is only for waiting for the disk I/O thread to receive the job and either
write it to disk or insert it in the write cache. When this limit is reached,
the peer connections will stop reading data from their sockets, until the disk
thread catches up. Setting this too low will severly limit your download rate.</p>
<p><tt class="docutils literal"><span class="pre">handshake_timeout</span></tt> specifies the number of seconds we allow a peer to
delay responding to a protocol handshake. If no response is received within
this time, the connection is closed.</p>
@ -3781,6 +3794,14 @@ into the read cache is always capped by the piece boundry.</p>
<p>When a piece in the write cache has <tt class="docutils literal"><span class="pre">write_cache_line_size</span></tt> contiguous
blocks in it, they will be flushed. Setting this to 1 effectively
disables the write cache.</p>
<p><tt class="docutils literal"><span class="pre">adjust_priority_on_disk_failure</span></tt> specifies what libtorrent should do
on disk failures. If this is set to true, instead of pausing the torrent
and setting it to an error state when it fails to write to disk, the
priorities of all pieces are set to 0. This effectively means the client
can keep seeding the parts that were already downloaded, instead of
leaving the swarm because of the error.</p>
<p>If a read operation fails, it will still set an error on the torrent
and pause it.</p>
</div>
</div>
<div class="section" id="pe-settings">
@ -4499,12 +4520,14 @@ mappings.</p>
<p><tt class="docutils literal"><span class="pre">mapping</span></tt> refers to the mapping index of the port map that failed, i.e.
the index returned from <a class="reference internal" href="#add-mapping">add_mapping</a>.</p>
<p><tt class="docutils literal"><span class="pre">type</span></tt> is 0 for NAT-PMP and 1 for UPnP.</p>
<p><tt class="docutils literal"><span class="pre">error</span></tt> tells you what failed.</p>
<pre class="literal-block">
struct portmap_error_alert: alert
{
// ...
int mapping;
int type;
error_code error;
};
</pre>
</div>
@ -4548,13 +4571,13 @@ struct portmap_log_alert: alert
<p>If the storage fails to read or write files that it needs access to, this alert is
generated and the torrent is paused.</p>
<p><tt class="docutils literal"><span class="pre">file</span></tt> is the path to the file that was accessed when the error occurred.</p>
<p><tt class="docutils literal"><span class="pre">msg</span></tt> is the error message received from the OS.</p>
<p><tt class="docutils literal"><span class="pre">error</span></tt> is the error code describing the error.</p>
<pre class="literal-block">
struct file_error_alert: torrent_alert
{
// ...
std::string file;
std::string msg;
error_code error;
};
</pre>
</div>
@ -4720,15 +4743,49 @@ struct hash_failed_alert: torrent_alert
};
</pre>
</div>
<div class="section" id="peer-alert">
<h2>peer_alert</h2>
<p>The peer alert is a base class for alerts that refer to a specific peer. It includes all
the information to identify the peer. i.e. <tt class="docutils literal"><span class="pre">ip</span></tt> and <tt class="docutils literal"><span class="pre">peer-id</span></tt>.</p>
<pre class="literal-block">
struct peer_alert: torrent_alert
{
// ...
tcp::endpoint ip;
peer_id pid;
};
</pre>
</div>
<div class="section" id="peer-ban-alert">
<h2>peer_ban_alert</h2>
<p>This alert is generated when a peer is banned because it has sent too many corrupt pieces
to us. <tt class="docutils literal"><span class="pre">ip</span></tt> is the endpoint to the peer that was banned.</p>
<pre class="literal-block">
struct peer_ban_alert: torrent_alert
struct peer_ban_alert: peer_alert
{
// ...
};
</pre>
</div>
<div class="section" id="peer-snubbed-alert">
<h2>peer_snubbed_alert</h2>
<p>This alert is generated when a peer is snubbed, when it stops sending data when we request
it.</p>
<pre class="literal-block">
struct peer_snubbed_alert: peer_alert
{
// ...
};
</pre>
</div>
<div class="section" id="peer-unsnubbed-alert">
<h2>peer_unsnubbed_alert</h2>
<p>This alert is generated when a peer is unsnubbed. Essentially when it was snubbed for stalling
sending data, and now it started sending data again.</p>
<pre class="literal-block">
struct peer_unsnubbed_alert: peer_alert
{
// ...
asio::ip::tcp::endpoint ip;
};
</pre>
</div>
@ -4736,12 +4793,35 @@ struct peer_ban_alert: torrent_alert
<h2>peer_error_alert</h2>
<p>This alert is generated when a peer sends invalid data over the peer-peer protocol. The peer
will be disconnected, but you get its ip address from the alert, to identify it.</p>
<p>The <tt class="docutils literal"><span class="pre">error_code</span></tt> tells you what error caused this alert.</p>
<pre class="literal-block">
struct peer_error_alert: torrent_alert
struct peer_error_alert: peer_alert
{
// ...
asio::ip::tcp::endpoint ip;
peer_id id;
error_code error;
};
</pre>
</div>
<div class="section" id="peer-connected-alert">
<h2>peer_connected_alert</h2>
<p>This alert is generated when a peer is connected.</p>
<pre class="literal-block">
struct peer_connected_alert: peer_alert
{
// ...
};
</pre>
</div>
<div class="section" id="peer-disconnected-alert">
<h2>peer_disconnected_alert</h2>
<p>This alert is generated when a peer is disconnected for any reason (other than the ones
covered by <tt class="docutils literal"><span class="pre">peer_error_alert</span></tt>).</p>
<p>The <tt class="docutils literal"><span class="pre">error_code</span></tt> tells you what error caused peer to disconnect.</p>
<pre class="literal-block">
struct peer_disconnected_alert: peer_alert
{
// ...
error_code error;
};
</pre>
</div>
@ -4751,20 +4831,10 @@ struct peer_error_alert: torrent_alert
<tt class="docutils literal"><span class="pre">ìp</span></tt> is the address of the peer and the <tt class="docutils literal"><span class="pre">request</span></tt> is the actual incoming
request from the peer.</p>
<pre class="literal-block">
struct invalid_request_alert: torrent_alert
struct invalid_request_alert: peer_alert
{
invalid_request_alert(
peer_request const&amp; r
, torrent_handle const&amp; h
, asio::ip::tcp::endpoint const&amp; send
, peer_id const&amp; pid
, std::string const&amp; msg);
virtual std::auto_ptr&lt;alert&gt; clone() const;
asio::ip::tcp::endpoint ip;
// ...
peer_request request;
peer_id id;
};
@ -4780,6 +4850,79 @@ struct peer_request
the index of the piece it want data from, <tt class="docutils literal"><span class="pre">start</span></tt> is the offset within the piece where the data
should be read, and <tt class="docutils literal"><span class="pre">length</span></tt> is the amount of data it wants.</p>
</div>
<div class="section" id="request-dropped-alert">
<h2>request_dropped_alert</h2>
<p>This alert is generated when a peer rejects or ignores a piece request.</p>
<pre class="literal-block">
struct request_dropped_alert: peer_alert
{
// ...
int block_index;
int piece_index;
};
</pre>
</div>
<div class="section" id="block-timeout-alert">
<h2>block_timeout_alert</h2>
<p>This alert is generated when a block request times out.</p>
<pre class="literal-block">
struct block_timeout_alert: peer_alert
{
// ...
int block_index;
int piece_index;
};
</pre>
</div>
<div class="section" id="block-finished-alert">
<h2>block_finished_alert</h2>
<p>This alert is generated when a block request receives a response.</p>
<pre class="literal-block">
struct block_finished_alert: peer_alert
{
// ...
int block_index;
int piece_index;
};
</pre>
</div>
<div class="section" id="block-downloading-alert">
<h2>block_downloading_alert</h2>
<p>This alert is generated when a block request is sent to a peer.</p>
<pre class="literal-block">
struct block_downloading_alert: peer_alert
{
// ...
int block_index;
int piece_index;
};
</pre>
</div>
<div class="section" id="unwanted-block-alert">
<h2>unwanted_block_alert</h2>
<p>This alert is generated when a block is received that was not requested or
whose request timed out.</p>
<pre class="literal-block">
struct unwanted_block_alert: peer_alert
{
// ...
int block_index;
int piece_index;
};
</pre>
</div>
<div class="section" id="torrent-delete-failed-alert">
<h2>torrent_delete_failed_alert</h2>
<p>This alert is generated when a request to delete the files of a torrent fails.</p>
<p>The <tt class="docutils literal"><span class="pre">error_code</span></tt> tells you why it failed.</p>
<pre class="literal-block">
struct torrent_delete_failed_alert: torrent_alert
{
// ...
error_code error;
};
</pre>
</div>
<div class="section" id="torrent-finished-alert">
<h2>torrent_finished_alert</h2>
<p>This alert is generated when a torrent switches from being a downloader to a seed.
@ -4840,13 +4983,13 @@ only those that needs to download it from peers (when utilizing the libtorrent e
<div class="section" id="fastresume-rejected-alert">
<h2>fastresume_rejected_alert</h2>
<p>This alert is generated when a fastresume file has been passed to <tt class="docutils literal"><span class="pre">add_torrent</span></tt> but the
files on disk did not match the fastresume file. The string explains the reason why the
files on disk did not match the fastresume file. The <tt class="docutils literal"><span class="pre">error_code</span></tt> explains the reason why the
resume file was rejected.</p>
<pre class="literal-block">
struct fastresume_rejected_alert: torrent_alert
{
// ...
std::string msg;
error_code error;
};
</pre>
</div>
@ -4917,12 +5060,12 @@ struct save_resume_data_alert: torrent_alert
<div class="section" id="save-resume-data-failed-alert">
<h2>save_resume_data_failed_alert</h2>
<p>This alert is generated instead of <tt class="docutils literal"><span class="pre">save_resume_data_alert</span></tt> if there was an error
generating the resume data. <tt class="docutils literal"><span class="pre">msg</span></tt> describes what went wrong.</p>
generating the resume data. <tt class="docutils literal"><span class="pre">error</span></tt> describes what went wrong.</p>
<pre class="literal-block">
struct save_resume_data_failed_alert: torrent_alert
{
// ...
std::string msg;
error_code error;
};
</pre>
</div>
@ -5025,9 +5168,9 @@ its own error category (<tt class="docutils literal"><span class="pre">libtorren
codes:</p>
<table border="1" class="docutils">
<colgroup>
<col width="6%" />
<col width="28%" />
<col width="66%" />
<col width="5%" />
<col width="37%" />
<col width="58%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">code</th>
@ -5147,9 +5290,446 @@ trackers <tt class="docutils literal"><span class="pre">udp</span></tt> is recog
<td>url_parse_error</td>
<td>The URL did not conform to URL syntax and failed to be parsed</td>
</tr>
<tr><td>26</td>
<td>peer_sent_empty_piece</td>
<td>The peer sent a 'piece' message of length 0</td>
</tr>
<tr><td>27</td>
<td>parse_failed</td>
<td>A bencoded structure was currupt and failed to be parsed</td>
</tr>
<tr><td>28</td>
<td>invalid_file_tag</td>
<td>The fast resume file was missing or had an invalid file version
tag</td>
</tr>
<tr><td>29</td>
<td>missing_info_hash</td>
<td>The fast resume file was missing or had an invalid info-hash</td>
</tr>
<tr><td>30</td>
<td>mismatching_info_hash</td>
<td>The info-hash in the resume file did not match the torrent</td>
</tr>
<tr><td>31</td>
<td>invalid_hostname</td>
<td>The URL contained an invalid hostname</td>
</tr>
<tr><td>32</td>
<td>invalid_port</td>
<td>The URL had an invalid port</td>
</tr>
<tr><td>33</td>
<td>port_blocked</td>
<td>The port is blocked by the port-filter, and prevented the
connection</td>
</tr>
<tr><td>34</td>
<td>expected_close_bracket_in_address</td>
<td>The IPv6 address was expected to end with ']'</td>
</tr>
<tr><td>35</td>
<td>destructing_torrent</td>
<td>The torrent is being destructed, preventing the operation to
succeed</td>
</tr>
<tr><td>36</td>
<td>timed_out</td>
<td>The connection timed out</td>
</tr>
<tr><td>37</td>
<td>upload_upload_connection</td>
<td>The peer is upload only, and we are upload only. There's no point
in keeping the connection</td>
</tr>
<tr><td>38</td>
<td>uninteresting_upload_peer</td>
<td>The peer is upload only, and we're not interested in it. There's
no point in keeping the connection</td>
</tr>
<tr><td>39</td>
<td>invalid_info_hash</td>
<td>The peer sent an unknown info-hash</td>
</tr>
<tr><td>40</td>
<td>torrent_paused</td>
<td>The torrent is paused, preventing the operation from succeeding</td>
</tr>
<tr><td>41</td>
<td>invalid_have</td>
<td>The peer sent an invalid have message, either wrong size or
referring to a piece that doesn't exist in the torrent</td>
</tr>
<tr><td>42</td>
<td>invalid_bitfield_size</td>
<td>The bitfield message had the incorrect size</td>
</tr>
<tr><td>43</td>
<td>too_many_requests_when_choked</td>
<td>The peer kept requesting pieces after it was choked, possible
abuse attempt.</td>
</tr>
<tr><td>44</td>
<td>invalid_piece</td>
<td>The peer sent a piece message that does not correspond to a
piece request sent by the client</td>
</tr>
<tr><td>45</td>
<td>no_memory</td>
<td>memory allocation failed</td>
</tr>
<tr><td>46</td>
<td>torrent_aborted</td>
<td>The torrent is aborted, preventing the operation to succeed</td>
</tr>
<tr><td>47</td>
<td>self_connection</td>
<td>The peer is a connection to ourself, no point in keeping it</td>
</tr>
<tr><td>48</td>
<td>invalid_piece_size</td>
<td>The peer sent a piece message with invalid size, either negative
or greater than one block</td>
</tr>
<tr><td>49</td>
<td>timed_out_no_interest</td>
<td>The peer has not been interesting or interested in us for too
long, no point in keeping it around</td>
</tr>
<tr><td>50</td>
<td>timed_out_inactivity</td>
<td>The peer has not said anything in a long time, possibly dead</td>
</tr>
<tr><td>51</td>
<td>timed_out_no_handshake</td>
<td>The peer did not send a handshake within a reasonable amount of
time, it might not be a bittorrent peer</td>
</tr>
<tr><td>52</td>
<td>timed_out_no_request</td>
<td>The peer has been unchoked for too long without requesting any
data. It might be lying about its interest in us</td>
</tr>
<tr><td>53</td>
<td>invalid_choke</td>
<td>The peer sent an invalid choke message</td>
</tr>
<tr><td>54</td>
<td>invalid_unchoke</td>
<td>The peer send an invalid unchoke message</td>
</tr>
<tr><td>55</td>
<td>invalid_interested</td>
<td>The peer sent an invalid interested message</td>
</tr>
<tr><td>56</td>
<td>invalid_not_interested</td>
<td>The peer sent an invalid not-interested message</td>
</tr>
<tr><td>57</td>
<td>invalid_request</td>
<td>The peer sent an invalid piece request message</td>
</tr>
<tr><td>58</td>
<td>invalid_hash_list</td>
<td>The peer sent an invalid hash-list message (this is part of the
merkle-torrent extension)</td>
</tr>
<tr><td>59</td>
<td>invalid_hash_piece</td>
<td>The peer sent an invalid hash-piece message (this is part of the
merkle-torrent extension)</td>
</tr>
<tr><td>60</td>
<td>invalid_cancel</td>
<td>The peer sent an invalid cancel message</td>
</tr>
<tr><td>61</td>
<td>invalid_dht_port</td>
<td>The peer sent an invalid DHT port-message</td>
</tr>
<tr><td>62</td>
<td>invalid_suggest</td>
<td>The peer sent an invalid suggest piece-message</td>
</tr>
<tr><td>63</td>
<td>invalid_have_all</td>
<td>The peer sent an invalid have all-message</td>
</tr>
<tr><td>64</td>
<td>invalid_have_none</td>
<td>The peer sent an invalid have none-message</td>
</tr>
<tr><td>65</td>
<td>invalid_reject</td>
<td>The peer sent an invalid reject message</td>
</tr>
<tr><td>66</td>
<td>invalid_allow_fast</td>
<td>The peer sent an invalid allow fast-message</td>
</tr>
<tr><td>67</td>
<td>invalid_extended</td>
<td>The peer sent an invalid extesion message ID</td>
</tr>
<tr><td>68</td>
<td>invalid_message</td>
<td>The peer sent an invalid message ID</td>
</tr>
<tr><td>69</td>
<td>sync_hash_not_found</td>
<td>The synchronization hash was not found in the encrypted handshake</td>
</tr>
<tr><td>70</td>
<td>invalid_encryption_constant</td>
<td>The encryption constant in the handshake is invalid</td>
</tr>
<tr><td>71</td>
<td>no_plaintext_mode</td>
<td>The peer does not support plaintext, which is the selected mode</td>
</tr>
<tr><td>72</td>
<td>no_rc4_mode</td>
<td>The peer does not support rc4, which is the selected mode</td>
</tr>
<tr><td>73</td>
<td>unsupported_encryption_mode</td>
<td>The peer does not support any of the encryption modes that the
client supports</td>
</tr>
<tr><td>74</td>
<td>unsupported_encryption_mode_selected</td>
<td>The peer selected an encryption mode that the client did not
advertise and does not support</td>
</tr>
<tr><td>75</td>
<td>invalid_pad_size</td>
<td>The pad size used in the encryption handshake is of invalid size</td>
</tr>
<tr><td>76</td>
<td>invalid_encrypt_handshake</td>
<td>The encryption handshake is invalid</td>
</tr>
<tr><td>77</td>
<td>no_incoming_encrypted</td>
<td>The client is set to not support incoming encrypted connections
and this is an encrypted connection</td>
</tr>
<tr><td>78</td>
<td>no_incoming_regular</td>
<td>The client is set to not support incoming regular bittorrent
connections, and this is a regular connection</td>
</tr>
<tr><td>79</td>
<td>duplicate_peer_id</td>
<td>The client is already connected to this peer-ID</td>
</tr>
<tr><td>80</td>
<td>torrent_removed</td>
<td>Torrent was removed</td>
</tr>
<tr><td>81</td>
<td>packet_too_large</td>
<td>The packet size exceeded the upper sanity check-limit</td>
</tr>
<tr><td>82</td>
<td>http_parse_error</td>
<td>Failed to parse HTTP response</td>
</tr>
<tr><td>83</td>
<td>http_error</td>
<td>The web server responded with an error</td>
</tr>
<tr><td>84</td>
<td>missing_location</td>
<td>The web server response is missing a location header</td>
</tr>
<tr><td>85</td>
<td>invalid_redirection</td>
<td>The web seed redirected to a path that no longer matches the
.torrent directory structure</td>
</tr>
<tr><td>86</td>
<td>redirecting</td>
<td>The connection was closed becaused it redirected to a different
URL</td>
</tr>
<tr><td>87</td>
<td>invalid_range</td>
<td>The HTTP range header is invalid</td>
</tr>
<tr><td>88</td>
<td>no_content_length</td>
<td>The HTTP response did not have a content length</td>
</tr>
<tr><td>89</td>
<td>banned_by_ip_filter</td>
<td>The IP is blocked by the IP filter</td>
</tr>
<tr><td>90</td>
<td>too_many_connections</td>
<td>At the connection limit</td>
</tr>
<tr><td>91</td>
<td>peer_banned</td>
<td>The peer is marked as banned</td>
</tr>
<tr><td>92</td>
<td>stopping_torrent</td>
<td>The torrent is stopping, causing the operation to fail</td>
</tr>
<tr><td>93</td>
<td>too_many_corrupt_pieces</td>
<td>The peer has sent too many corrupt pieces and is banned</td>
</tr>
<tr><td>94</td>
<td>torrent_not_ready</td>
<td>The torrent is not ready to receive peers</td>
</tr>
<tr><td>95</td>
<td>peer_not_constructed</td>
<td>The peer is not completely constructed yet</td>
</tr>
<tr><td>96</td>
<td>session_closing</td>
<td>The session is closing, causing the operation to fail</td>
</tr>
<tr><td>97</td>
<td>optimistic_disconnect</td>
<td>The peer was disconnected in order to leave room for a
potentially better peer</td>
</tr>
<tr><td>98</td>
<td>torrent_finished</td>
<td>The torrent is finished</td>
</tr>
<tr><td>99</td>
<td>no_router</td>
<td>No UPnP router found</td>
</tr>
<tr><td>100</td>
<td>metadata_too_large</td>
<td>The metadata message says the metadata exceeds the limit</td>
</tr>
<tr><td>101</td>
<td>invalid_metadata_request</td>
<td>The peer sent an invalid metadata request message</td>
</tr>
<tr><td>102</td>
<td>invalid_metadata_size</td>
<td>The peer advertised an invalid metadata size</td>
</tr>
<tr><td>103</td>
<td>invalid_metadata_offset</td>
<td>The peer sent a message with an invalid metadata offset</td>
</tr>
<tr><td>104</td>
<td>invalid_metadata_message</td>
<td>The peer sent an invalid metadata message</td>
</tr>
<tr><td>105</td>
<td>pex_message_too_large</td>
<td>The peer sent a peer exchange message that was too large</td>
</tr>
<tr><td>106</td>
<td>invalid_pex_message</td>
<td>The peer sent an invalid peer exchange message</td>
</tr>
<tr><td>107</td>
<td>invalid_lt_tracker_message</td>
<td>The peer sent an invalid tracker exchange message</td>
</tr>
<tr><td>108</td>
<td>unsupported_protocol_version</td>
<td>The NAT-PMP router responded with an unsupported protocol version</td>
</tr>
<tr><td>109</td>
<td>natpmp_not_authorized</td>
<td>You are not authorized to map ports on this NAT-PMP router</td>
</tr>
<tr><td>110</td>
<td>network_failure</td>
<td>The NAT-PMP router failed because of a network failure</td>
</tr>
<tr><td>111</td>
<td>no_resources</td>
<td>The NAT-PMP router failed because of lack of resources</td>
</tr>
<tr><td>112</td>
<td>unsupported_opcode</td>
<td>The NAT-PMP router failed because an unsupported opcode was sent</td>
</tr>
</tbody>
</table>
<p>The names of these error codes are declared in then <tt class="docutils literal"><span class="pre">libtorrent::errors</span></tt> namespace.</p>
<p>There is also another error category, <tt class="docutils literal"><span class="pre">libtorrent::upnp_category</span></tt>, defining errors
retrned by UPnP routers. Here's a (possibly incomplete) list of UPnP error codes:</p>
<table border="1" class="docutils">
<colgroup>
<col width="6%" />
<col width="41%" />
<col width="53%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">code</th>
<th class="head">symbol</th>
<th class="head">description</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>0</td>
<td>no_error</td>
<td>No error</td>
</tr>
<tr><td>402</td>
<td>invalid_argument</td>
<td>One of the arguments in the request is invalid</td>
</tr>
<tr><td>501</td>
<td>action_failed</td>
<td>The request failed</td>
</tr>
<tr><td>714</td>
<td>value_not_in_array</td>
<td>The specified value does not exist in the array</td>
</tr>
<tr><td>715</td>
<td>source_ip_cannot_be_wildcarded</td>
<td>The source IP address cannot be wild-carded, but
must be fully specified</td>
</tr>
<tr><td>716</td>
<td>external_port_cannot_be_wildcarded</td>
<td>The external port cannot be wildcarded, but must
be specified</td>
</tr>
<tr><td>718</td>
<td>port_mapping_conflict</td>
<td>The port mapping entry specified conflicts with a
mapping assigned previously to another client</td>
</tr>
<tr><td>724</td>
<td>internal_port_must_match_external</td>
<td>Internal and external port value must be the same</td>
</tr>
<tr><td>725</td>
<td>only_permanent_leases_supported</td>
<td>The NAT implementation only supports permanent
lease times on port mappings</td>
</tr>
<tr><td>726</td>
<td>remote_host_must_be_wildcard</td>
<td>RemoteHost must be a wildcard and cannot be a
specific IP addres or DNS name</td>
</tr>
<tr><td>727</td>
<td>external_port_must_be_wildcard</td>
<td>ExternalPort must be a wildcard and cannot be a
specific port</td>
</tr>
</tbody>
</table>
<p>The UPnP errors are declared in the <tt class="docutils literal"><span class="pre">libtorrent::upnp_errors</span></tt> namespace.</p>
<div class="section" id="translating-error-codes">
<h2>translating error codes</h2>
<p>The error_code::message() function will typically return a localized error string,

View File

@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>projects using libtorrent</title>
<link rel="stylesheet" type="text/css" href="../../css/base.css" />
<link rel="stylesheet" type="text/css" href="../../css/rst.css" />

View File

@ -224,16 +224,16 @@ same semantics.</p>
<div class="section" id="high-performance-seeding">
<h1>high performance seeding</h1>
<p>In the case of a high volume seed, there are two main concerns. Performance and scalability.
This transelates into high send rates, and low memory and CPU usage per peer connection.</p>
This translates into high send rates, and low memory and CPU usage per peer connection.</p>
<div class="section" id="file-pool">
<h2>file pool</h2>
<p>libtorrent keeps an LRU file cache. Each file that is opened, is stuck in the cache. The main
purpose of this is because of anti-virus software that hooks och file-open and file close to
purpose of this is because of anti-virus software that hooks on file-open and file close to
scan the file. Anti-virus software that does that will significantly increase the cost of
opening and closing files. However, for a high performance seed, the file open/close might
be so frequent that it becomes a significant cost. It might therefore be a good idea to allow
a large file descriptor cache. Adjust this though <tt class="docutils literal"><span class="pre">session_settings::file_pool_size</span></tt>.</p>
<p>Don't forget to set a high rlimit for file descriptors in yor process as well. This limit
<p>Don't forget to set a high rlimit for file descriptors in your process as well. This limit
must be high enough to keep all connections and files open.</p>
</div>
<div class="section" id="disk-cache">