-
Notifications
You must be signed in to change notification settings - Fork 0
Peer Communication
Jacky He edited this page Jun 14, 2026
·
2 revisions
In this page we are creating a Peer object to communicate or retrieve information(torrent file, torrent status, etc) from the peer. Theoretically we can download files from the peer but since the goal of this lib is not to implement a full client, we currently have no plan for supporting the downloading and uploading feature.
from time import sleep
from torrentlib import Peer, Torrent
torrent = Torrent(info_hash="1234567890abcdef1234567890abcdef12345678")
peer_id = "-robots-testing12345"
peer_addr = ("127.0.0.1", 6881)
with Peer(peer_addr, torrent, peer_id) as peer:
print(peer)
print(peer.peer_supports_extensions)
print(peer.peer_extension_ids)
sleep(2)
peer.read_all()
print(len(torrent.peers))
print(len(torrent.peers6))To keep long-lived connections open, call send_keep_alive() periodically:
import threading
from time import sleep
from torrentlib import Peer, Torrent
from torrentlib.Peer.PeerCommunicationException import SocketClosedException
def keep_alive_loop(peer: Peer, stop_event: threading.Event, interval: int = 120):
while not stop_event.is_set():
sleep(interval)
try:
peer.send_keep_alive()
except SocketClosedException:
break
torrent = Torrent(info_hash="1234567890abcdef1234567890abcdef12345678")
peer_id = "-robots-testing12345"
peer_addr = ("127.0.0.1", 6881)
stop_event = threading.Event()
try:
with Peer(peer_addr, torrent, peer_id) as peer:
thread = threading.Thread(
target=keep_alive_loop,
args=(peer, stop_event),
daemon=True,
)
thread.start()
peer.read_all()
finally:
stop_event.set()