diff --git a/electrum/interface.py b/electrum/interface.py index 21e165e18..a0c928b34 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -213,7 +213,7 @@ class Interface(PrintError): return None async def get_block_header(self, height, assert_mode): - res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 1) + res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 5) return blockchain.deserialize_header(bytes.fromhex(res), height) async def request_chunk(self, idx, tip): diff --git a/electrum/network.py b/electrum/network.py index 9fc65ee1d..497ca02b1 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -32,6 +32,8 @@ import socket import json import sys import ipaddress +import asyncio +import concurrent.futures import dns import dns.resolver @@ -42,9 +44,6 @@ from .bitcoin import COIN from . import constants from . import blockchain from .interface import Interface - -import asyncio -import concurrent.futures from .version import PROTOCOL_VERSION NODES_RETRY_INTERVAL = 60 @@ -700,7 +699,8 @@ class Network(PrintError): self.connection_down(interface.server) return finally: - self.connecting.remove(server) + try: self.connecting.remove(server) + except KeyError: pass with self.interface_lock: self.interfaces[server] = interface @@ -757,7 +757,7 @@ class Network(PrintError): if tip is not None: size = min(size, tip - index * 2016) size = max(size, 0) - res = await session.send_request('blockchain.block.headers', [index * 2016, size]) + res = await asyncio.wait_for(session.send_request('blockchain.block.headers', [index * 2016, size]), 20) conn = self.blockchain().connect_chunk(index, res['hex']) if not conn: return conn, 0