URI: 
       tlnworker: (fix) a listening node would busy-loop if remote DC-ed early - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit c010aa327e34273280abd0951e2a3ecb558c8b63
   DIR parent a81b0ecc591babb684e908c37c4e5e62145701c6
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Thu, 24 Sep 2020 01:52:35 +0200
       
       lnworker: (fix) a listening node would busy-loop if remote DC-ed early
       
       StreamReader.read() returns b'' on EOF, resulting in a busy loop
       
       Diffstat:
         M electrum/lntransport.py             |      10 ++++++++--
         M electrum/lnworker.py                |       4 ++--
       
       2 files changed, 10 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/electrum/lntransport.py b/electrum/lntransport.py
       t@@ -172,7 +172,10 @@ class LNResponderTransport(LNTransportBase):
                hs = HandshakeState(privkey_to_pubkey(self.privkey))
                act1 = b''
                while len(act1) < 50:
       -            act1 += await self.reader.read(50 - len(act1))
       +            buf = await self.reader.read(50 - len(act1))
       +            if not buf:
       +                raise HandshakeFailed('responder disconnected')
       +            act1 += buf
                if len(act1) != 50:
                    raise HandshakeFailed('responder: short act 1 read, length is ' + str(len(act1)))
                if bytes([act1[0]]) != HandshakeState.handshake_version:
       t@@ -200,7 +203,10 @@ class LNResponderTransport(LNTransportBase):
                # act 3
                act3 = b''
                while len(act3) < 66:
       -            act3 += await self.reader.read(66 - len(act3))
       +            buf = await self.reader.read(66 - len(act3))
       +            if not buf:
       +                raise HandshakeFailed('responder disconnected')
       +            act3 += buf
                if len(act3) != 66:
                    raise HandshakeFailed('responder: short act 3 read, length is ' + str(len(act3)))
                if bytes([act3[0]]) != HandshakeState.handshake_version:
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -193,8 +193,8 @@ class LNWorker(Logger, NetworkRetryManager[LNPeerAddr]):
                        transport = LNResponderTransport(self.node_keypair.privkey, reader, writer)
                        try:
                            node_id = await transport.handshake()
       -                except:
       -                    self.logger.info('handshake failure from incoming connection')
       +                except Exception as e:
       +                    self.logger.info(f'handshake failure from incoming connection: {e!r}')
                            return
                        peer = Peer(self, node_id, transport)
                        with self.lock: