NAME
Net::BitTorrent::Tracker - Multi-tier Tracker Manager
SYNOPSIS
use Net::BitTorrent::Tracker;
my $manager = Net::BitTorrent::Tracker->new(
tiers_raw => [
['udp://tracker.openbittorrent.com:80/announce'],
['http://tracker.example.com/announce', 'https://another.net/announce']
]
);
# Announce presence and get peers
$manager->announce_all({
infohash => $bin_ih,
peer_id => $my_id,
port => 6881,
downloaded => 0,
uploaded => 0,
left => 1024,
event => 'started'
}, sub ($peers) {
say "Found " . scalar(@$peers) . " peers!";
});
DESCRIPTION
Net::BitTorrent::Tracker manages communication with external trackers. It implements the Multi-tracker Metadata (BEP 12) specification, handling tiers, retries, and backoff logic.
Protocol Support
The manager automatically detects and handles multiple tracker protocols:
UDP (BEP 15): Lightweight, preferred transport.
HTTP/HTTPS: Standard bencoded announce protocol.
METHODS
new( %params )
Creates a new Tracker manager.
my $manager = Net::BitTorrent::Tracker->new(
tiers_raw => [ ['http://tracker.example.com/announce'] ]
);
This method initializes the tracker manager with a list of tracker tiers.
Expected parameters:
tiers_raw-
An array reference of array references, where each inner array contains tracker URLs for a single tier.
debug- optional-
Whether to enable debug logging.
announce_all( \%params, [$callback] )
Announces to all tracker tiers.
$manager->announce_all({
infohash => $ih,
peer_id => $id,
port => 6881,
left => 1000
}, sub ($peers) { ... });
This method iterates through tracker tiers (BEP 12), announcing presence and gathering peers. It returns an array reference of unique peer structures discovered.
Expected parameters:
\%params-
Standard announce parameters (infohash, peer_id, port, uploaded, downloaded, left, event).
$callback- optional-
A code reference called with an arrayref of peer structures ({ip, port}) when peers are received.
scrape_all( \@infohashes, [$callback] )
Scrapes all trackers for swarm stats.
$manager->scrape_all([$ih1, $ih2], sub ($stats) { ... });
This method queries all trackers for seeder/leecher counts (BEP 48). It returns a hash reference of statistics.
Expected parameters:
\@infohashes-
An array reference of binary infohashes to scrape.
$callback- optional-
A code reference called with a hash reference of statistics per infohash.
trackers( )
Returns a list of all tracker URLs.
my $list = $manager->trackers();
This method returns a flattened array reference of all managed tracker URLs.
tick( $delta )
Performs periodic maintenance for all trackers.
$manager->tick( 0.1 );
This method allows individual tracker objects to process timeouts and retransmissions.
Expected parameters:
add_tracker( $url )
Adds a new tracker to the manager.
$manager->add_tracker( 'udp://new.tracker.com:6969/announce' );
This method adds a new tracker URL as a new tier if it is not already present.
Expected parameters:
SEE ALSO
Net::BitTorrent::Tracker::HTTP, Net::BitTorrent::Tracker::UDP
AUTHOR
Sanko Robinson <sanko@cpan.org>
COPYRIGHT
Copyright (C) 2008-2026 by Sanko Robinson.
This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.