Как я могу определить, когда мой сокет потерял TCP-соединение, и восстановить соединение? - PullRequest
0 голосов
/ 04 июня 2018

У моего приложения есть проблема, из-за которой, если оно теряет соединение, оно блокируется навсегда и необходимо перезапустить все приложение.

Код, о котором идет речь:

def run(encoder, port, channel):

    decoder_socket = socket.socket()
    decoder_socket.connect((decoder, port))
    decoder_fp = decoder_socket.makefile("r", 0)

    parser = xml.sax.make_parser(['xml.sax.IncrementalParser'])
    parser.setContentHandler(RftDecoder())

    while True:
        data = decoder_fp.readline().strip("\x00") 
        if not(data):
            raise socket.error("no data")

        LOG.info("%s" % data.strip())
        parser.feed(data)

Если соединениеактивно закрыты с другой стороны, исключение возбуждается, как и ожидалось, проблем нет.Однако, когда соединение обрывается (например, если Decoder падает, или если кабель отключен), тогда вызов decoder_fp.readline () блокируется на неопределенный срок.

Strace ничего не показывает, когда это происходит, он просто продолжает сидеть в вызове recv ().

Итак, мой вопрос, как я могу обнаружить потерянное соединение, как описано,и переподключиться?

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