From b9ce0ab1c44841c964906a90200f1f573d8f44e3 Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Fri, 8 Jan 2021 03:05:28 +0100 Subject: [PATCH] [enh] migrate check_port_is_open to asyncio --- yunodiagnoser.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/yunodiagnoser.py b/yunodiagnoser.py index 23106e9..99ffaf1 100644 --- a/yunodiagnoser.py +++ b/yunodiagnoser.py @@ -289,14 +289,23 @@ async def check_ports(request): async def check_port_is_open(ip, port): if ":" in ip: - sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + futur = asyncio.open_connection(ip, port, family=socket.AF_INET6) else: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.settimeout(2) - result = sock.connect_ex((ip, port)) - sock.close() - return result == 0 + futur = asyncio.open_connection(ip, port, family=socket.AF_INET) + try: + _, writer = await asyncio.wait_for(futur, timeout=2) + except (asyncio.TimeoutError, ConnectionRefusedError): + return False + except Exception: + import traceback + traceback.print_exc() + return False + else: + writer.close() + await writer.wait_closed() + + return True # ########################################################################### # # SMTP check #