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 3.171 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )