BitTorrent-Simple
view release on metacpan or search on metacpan
script/torrent view on Meta::CPAN
return 1;
}
sub read_msg {
my ($socket) = @_;
my $len_buf = read_exactly($socket, 4);
return undef unless defined $len_buf;
my $len = unpack('N', $len_buf);
return [ undef, '' ] if $len == 0; # keep-alive
# Sanity check: reject absurdly large messages
return undef if $len > 2 * BLOCK_SIZE + 64;
my $msg = read_exactly($socket, $len);
return undef unless defined $msg && length($msg) == $len;
return [ ord(substr($msg, 0, 1)), substr($msg, 1) ];
}
script/torrent view on Meta::CPAN
send_msg($socket, MSG_REQUEST,
pack('NNN', $piece_idx, $offset, $blen));
$requested++;
}
# Receive a message
my $msg = read_msg($socket);
return (0, undef) unless defined $msg;
my ($id, $payload) = @$msg;
next unless defined $id; # keep-alive
if ($id == MSG_CHOKE) {
$$peer_choking_ref = 1;
return (0, undef);
} elsif ($id == MSG_UNCHOKE) {
$$peer_choking_ref = 0;
} elsif ($id == MSG_HAVE) {
if (length($payload) >= 4) {
( run in 1.504 second using v1.01-cache-2.11-cpan-39bf76dae61 )