From 86e0fa45635a3899e2d970fade8fc223f065ac98 Mon Sep 17 00:00:00 2001 From: NIC619 Date: Tue, 12 Nov 2019 18:33:44 +0800 Subject: [PATCH] Handle `StreamClosed` in ping protocol handler --- libp2p/host/ping.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libp2p/host/ping.py b/libp2p/host/ping.py index 9075f0bb..01a34109 100644 --- a/libp2p/host/ping.py +++ b/libp2p/host/ping.py @@ -1,7 +1,7 @@ import asyncio import logging -from libp2p.network.stream.exceptions import StreamEOF, StreamReset +from libp2p.network.stream.exceptions import StreamClosed, StreamEOF, StreamReset from libp2p.network.stream.net_stream_interface import INetStream from libp2p.peer.id import ID as PeerID from libp2p.typing import TProtocol @@ -25,17 +25,24 @@ async def _handle_ping(stream: INetStream, peer_id: PeerID) -> bool: logger.debug("Other side closed while waiting for ping from %s", peer_id) return False except StreamReset as error: + print("peer", peer_id, "ping reset") logger.debug( "Other side reset while waiting for ping from %s: %s", peer_id, error ) raise except Exception as error: + print("peer", peer_id, "ping", type(error)) logger.debug("Error while waiting to read ping for %s: %s", peer_id, error) raise logger.debug("Received ping from %s with data: 0x%s", peer_id, payload.hex()) + print("receive ping from", peer_id) - await stream.write(payload) + try: + await stream.write(payload) + except StreamClosed: + logger.debug("Fail to respond to ping from %s: stream closed", peer_id) + raise return True @@ -44,11 +51,13 @@ async def handle_ping(stream: INetStream) -> None: or closes the ``stream``.""" peer_id = stream.muxed_conn.peer_id + print("handling ping from", peer_id) while True: try: should_continue = await _handle_ping(stream, peer_id) if not should_continue: return except Exception: + print("error finish ping") await stream.reset() return