NAME

Net::BitTorrent::Protocol::BEP55 - Holepunching Extension (NAT Traversal)

SYNOPSIS

# Inherits from Net::BitTorrent::Protocol::BEP11
use Net::BitTorrent::Protocol::BEP55;

my $p = Net::BitTorrent::Protocol::BEP55->new(...);

# Ask a mutual peer to introduce us to a target
$p->send_hp_rendezvous($target_peer_id);

# Handle incoming connection requests
$p->on('hp_connect', sub ($ip, $port) {
    say "Attempting holepunch connect to $ip:$port";
});

DESCRIPTION

Net::BitTorrent::Protocol::BEP55 implements the Holepunching Extension (BEP 55). This extension allows two peers who are both behind NAT (Network Address Translation) to coordinate a simultaneous UDP connection (uTP) using a third, mutually connected peer as a signaling relay.

It runs as a sub-protocol of the Extension Protocol (BEP 10) under the name ut_holepunch.

METHODS

send_hp_rendezvous( $target_peer_id )

Sends a rendezvous request to a peer we are both connected to. The relay peer will then send a CONNECT message to the target.

send_hp_connect( $ip, $port )

Sent by the relay peer to the target, instructing it to initiate a uTP connection to the original requester at $ip:$port.

send_hp_error( $error_code )

Sent if the rendezvous cannot be completed (e.g., target peer is no longer connected).

Callbacks

on_hp_rendezvous( $id ) / on_hp_connect( $ip, $port ) / on_hp_error( $code )

Overridable handlers for incoming holepunching control messages.

Specifications

  • BEP 55: Holepunching

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.