我的应用程序有一个问题,如果它失去了连接,整个应用程序需要重新启动。
有关问题的代码:
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_fp.readline()调用将无限期地阻塞。
当这种情况发生时,Strace没有显示任何内容,它只是继续在recv()调用中运行。
所以我的问题是,如何检测连接何时丢失并重新连接?
发布于 2018-07-25 18:53:33
要知道你的套接字是否关闭,你必须使用socket.socket().recv(1024)等。
以下是一个例子:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.1.1'
port = 80
s.connect((host, port))
while 1:
dat = s.recv(1024)
if dat == "quit":
break;
#When loop Exited
s.close()
https://stackoverflow.com/questions/-100005758
复制相似问题