NAME

Net::BitTorrent::Protocol::BEP06 - Fast Extension Implementation

SYNOPSIS

# Inherits from Net::BitTorrent::Protocol::BEP55 (Holepunching)
use Net::BitTorrent::Protocol::BEP06;

# Inform peer we have everything immediately
$proto->send_have_all( );

# Explicitly reject a request (instead of ignoring it)
$proto->send_reject( $index, $begin, $length );

DESCRIPTION

Net::BitTorrent::Protocol::BEP06 implements the Fast Extension (BEP 06). This extension improves swarm efficiency by adding several messages that reduce latency during startup and provide better error handling for block requests.

METHODS

send_have_all( )

Signals that the local client has all pieces.

$proto->send_have_all();

This method sends a HAVE_ALL message, signaling that we are a seeder.

send_have_none( )

Signals that the local client has no pieces.

$proto->send_have_none();

This method sends a HAVE_NONE message, signaling that we are a leecher with no data yet.

send_suggest( $index )

Suggests a piece to the remote peer.

$proto->send_suggest( 42 );

This method sends a SUGGEST_PIECE message, hinting that the specified piece is available and would be efficient to download.

Expected parameters:

$index

The zero-based piece index.

send_reject( $index, $begin, $length )

Rejects a block request.

$proto->send_reject( 0, 0, 16384 );

This method informs the peer that their request for a specific block has been rejected, allowing them to immediately retry other peers.

Expected parameters:

$index

The piece index.

$begin

The byte offset within the piece.

$length

The number of bytes requested.

send_allowed_fast( $index )

Allows a piece to be requested even if choked.

$proto->send_allowed_fast( 5 );

This method informs the peer that they can request the specified piece even if they are currently choked.

Expected parameters:

$index

The piece index.

have_all event

Emitted when a HAVE_ALL message is received.

$proto->on( have_all => sub ( $self ) { ... } );

have_none event

Emitted when a HAVE_NONE message is received.

$proto->on( have_none => sub ( $self ) { ... } );

suggest event

Emitted when a SUGGEST_PIECE message is received.

$proto->on( suggest => sub ( $self, $index ) { ... } );

Expected parameters:

$index

The suggested piece index.

reject event

Emitted when a REJECT_REQUEST message is received.

$proto->on( reject => sub ( $self, $index, $begin, $length ) { ... } );

Expected parameters:

$index

The piece index.

$begin

The byte offset.

$length

The length of the rejected block.

allowed_fast event

Emitted when an ALLOWED_FAST message is received.

$proto->on( allowed_fast => sub ( $self, $index ) { ... } );

Expected parameters:

$index

The allowed piece index.

SPECIFICATIONS

  • BEP 06: Fast Extension

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.