Fix ping protocol

This commit is contained in:
mhchia
2019-12-01 19:17:32 +08:00
parent 6149aacc01
commit eb494e8682
4 changed files with 29 additions and 27 deletions

View File

@ -1,4 +1,4 @@
import asyncio
import trio
import logging
from libp2p.network.stream.exceptions import StreamClosed, StreamEOF, StreamReset
@ -16,22 +16,23 @@ logger = logging.getLogger("libp2p.host.ping")
async def _handle_ping(stream: INetStream, peer_id: PeerID) -> bool:
"""Return a boolean indicating if we expect more pings from the peer at
``peer_id``."""
try:
payload = await asyncio.wait_for(stream.read(PING_LENGTH), RESP_TIMEOUT)
except asyncio.TimeoutError as error:
logger.debug("Timed out waiting for ping from %s: %s", peer_id, error)
raise
except StreamEOF:
logger.debug("Other side closed while waiting for ping from %s", peer_id)
return False
except StreamReset as error:
logger.debug(
"Other side reset while waiting for ping from %s: %s", peer_id, error
)
raise
except Exception as error:
logger.debug("Error while waiting to read ping for %s: %s", peer_id, error)
raise
with trio.fail_after(RESP_TIMEOUT):
try:
payload = await stream.read(PING_LENGTH)
except trio.TooSlowError as error:
logger.debug("Timed out waiting for ping from %s: %s", peer_id, error)
raise
except StreamEOF:
logger.debug("Other side closed while waiting for ping from %s", peer_id)
return False
except StreamReset as error:
logger.debug(
"Other side reset while waiting for ping from %s: %s", peer_id, error
)
raise
except Exception as 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())