From b7e220b4c5d0785427f59cb5f0756df288e7a075 Mon Sep 17 00:00:00 2001 From: Maxim Devaev Date: Sun, 17 Jul 2022 15:23:06 +0300 Subject: [PATCH] workaround for https://bugs.python.org/issue39758 --- kvmd/aiotools.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/kvmd/aiotools.py b/kvmd/aiotools.py index ee5e86d7..d085cf89 100644 --- a/kvmd/aiotools.py +++ b/kvmd/aiotools.py @@ -23,6 +23,7 @@ import os import signal import asyncio +import ssl import functools import types @@ -133,10 +134,20 @@ async def close_writer(writer: asyncio.StreamWriter) -> bool: if not closing: writer.transport.abort() # type: ignore writer.close() - try: - await writer.wait_closed() - except Exception: - pass + # FIXME: Unwrap the SSL socket, ignoring want-read errors + # - https://bugs.python.org/issue39758 + # - https://github.com/encode/httpcore/pull/84/files + try: + ssl_obj = writer.get_extra_info("ssl_object") + if ssl_obj is not None: + ssl_obj.unwrap() + except ssl.SSLWantReadError: + pass + else: + try: + await writer.wait_closed() + except Exception: + pass return (not closing)