У меня есть некоторый код Python, который иногда блокируется при открытии соединения, но данные не отправляются. Я понимаю, почему он ожидает 64 или менее бит данных. Это будет ждать вечно. Существует ли простой способ тайм-аут соединения, если данные не получены. Любая помощь или предложения будут с благодарностью.

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('', port))
    serversocket.listen(5) # become a server socket, maximum 5 connections
    while 1:
        try:
            while 1:
               # print "Waiting for oonnection..."
                connection, address = serversocket.accept()
                buf = connection.recv(64)
1
Paul Di Domenico 21 Дек 2019 в 03:16

1 ответ

Лучший ответ

Вы можете использовать socket.settimeout(value), где value - количество секунд.

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('', port))
    serversocket.listen(5) # become a server socket, maximum 5 connections

    while 1:
        try:
            while 1:
               # print "Waiting for oonnection..."
                connection, address = serversocket.accept()
                connection.settimeout(5) # Set 5 seconds timeout to receive 64 bytes of data

                buf = connection.recv(64)

        except socket.timeout:
            print("Timeout happened -- goting back to accept another connection")
0
aminrd 21 Дек 2019 в 00:27