如何检测套接字何时丢失TCP连接并重新连接?

时间:2018-06-04 07:32:42

标签: python python-2.7 sockets networking network-programming

我的应用程序存在一个问题,即如果它失去连接,它将永远阻塞,整个应用程序需要重新启动。

有问题的代码:

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()调用上。

所以我的问题是,如何检测连接何时丢失并重新连接?

0 个答案:

没有答案