UDP-сокет Python для проверки соединения - PullRequest
0 голосов
/ 13 мая 2019

У меня есть небольшая консоль python, которая работает через UDP.У меня проблема в том, что если я внезапно отключаюсь от клиента, соединение остается открытым в netstat (потому что это UDP).

Я попытался реализовать threading.Timer на сервере, который запрашивает соединениеактивен, и если клиент не отвечает в течение этого времени, соединение закрывается со стороны сервера.

Это то, что я пытался

def check_conn(sock: socket.socket):
    # sock.settimeout()
    sock.send(b"\nAwake?")
    try:
        ack = sock.recv(1024)
        ack = ack.decode("UTF-8")
        if ack.strip() == "Yea":
            pass
        else:
            sock.close()
    except:
        sock.close()


so = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
so.connect((host, port))
t = threading.Timer(10.0, check_conn, [so])
t.start()
data = so.recv(1024)
#rest of the main program

У меня проблема в том, чточто когда он запрашивает пароль, два so.recv(1024) открыты, и он не знает, как с ними обращаться (это мое предположение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...