From 0fca867ec09a1c80d0599edf7591164b7a00c71d Mon Sep 17 00:00:00 2001 From: Miroslav Kovar Date: Wed, 20 Sep 2017 22:52:16 +0200 Subject: [PATCH] Modified check_connection() to try bypassing DNS before giving up. --- CHANGELOG.md | 1 + lbrynet/core/utils.py | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 948c71531..e19a14d4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ at anytime. ### Fixed * Fixed `transaction_list` doc string * Fixed ([in lbryum](https://github.com/lbryio/lbryum/pull/156)) batched queries responsible for making transaction and tip histories slow + * Fixed daemon refusing to start if DNS cannot resolve lbry.io domain. ### Changed * Bumped `lbryum` requirement to 3.1.8 [see changelog](https://github.com/lbryio/lbryum/blob/master/CHANGELOG.md#318---2017-09-20) diff --git a/lbrynet/core/utils.py b/lbrynet/core/utils.py index 9dd629d92..a6049f470 100644 --- a/lbrynet/core/utils.py +++ b/lbrynet/core/utils.py @@ -94,14 +94,29 @@ def obfuscate(plain): return base64.b64encode(plain).encode('rot13') -def check_connection(server="lbry.io", port=80): +def check_connection(server="lbry.io", port=80, timeout=2, bypass_dns=False): """Attempts to open a socket to server:port and returns True if successful.""" + log.debug('Checking connection to %s:%s', server, port) try: - log.debug('Checking connection to %s:%s', server, port) - host = socket.gethostbyname(server) - s = socket.create_connection((host, port), 2) + if not bypass_dns: + server = socket.gethostbyname(server) + socket.create_connection((server, port), timeout) log.debug('Connection successful') return True + except (socket.gaierror, socket.herror) as ex: + log.info("Failed to connect to %s:%s. Unable to resolve domain. Trying to bypass DNS", + server, port, exc_info=True) + try: + server = "8.8.8.8" + port = 53 + socket.create_connection((server, port), timeout) + log.debug('Connection successful') + return True + except Exception as ex: + log.info( + "Failed to connect to %s:%s. Maybe the internet connection is not working", + server, port, exc_info=True) + return False except Exception as ex: log.info( "Failed to connect to %s:%s. Maybe the internet connection is not working",