Mplex: catch `RawConnError` when writing

Also, do nothing in `MplexStream.reset` if `MuxedConnUnavailable` is
raised when sending the message.
pull/365/head
mhchia 2020-02-04 21:57:59 +08:00
parent f884bfa39e
commit c0ab609559
No known key found for this signature in database
GPG Key ID: 389EFBEA1362589A
2 changed files with 13 additions and 2 deletions

View File

@ -166,7 +166,13 @@ class Mplex(IMuxedConn):
:param _bytes: byte array to write
:return: length written
"""
await self.secured_conn.write(_bytes)
try:
await self.secured_conn.write(_bytes)
except RawConnError as e:
raise MplexUnavailable(
"failed to write message to the underlying connection"
) from e
return len(_bytes)
async def handle_incoming(self) -> None:

View File

@ -3,6 +3,7 @@ from typing import TYPE_CHECKING
import trio
from libp2p.stream_muxer.abc import IMuxedStream
from libp2p.stream_muxer.exceptions import MuxedConnUnavailable
from .constants import HeaderTags
from .datastructures import StreamID
@ -189,7 +190,11 @@ class MplexStream(IMuxedStream):
if self.is_initiator
else HeaderTags.ResetReceiver
)
await self.muxed_conn.send_message(flag, None, self.stream_id)
# Try to send reset message to the other side. Ignore if there is anything wrong.
try:
await self.muxed_conn.send_message(flag, None, self.stream_id)
except MuxedConnUnavailable:
pass
self.event_local_closed.set()
self.event_remote_closed.set()