“[Errno -2]名称或服务未知”上的Python套接字块?
问题描述:
我在Tornado IOLoop中异步运行非阻塞套接字。但是,尽管如此,有时会出现块(如0%的CPU所示),并且总是导致Errorno -2 Name or service not known
。“[Errno -2]名称或服务未知”上的Python套接字块?
为什么会发生这种情况?
它阻塞了大约五秒(至少超过两倍的超时)。在任何时候,可能有15-30个开放式套接字,与setsockopt
标志重复使用。
插座:
# make connection
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.settimeout(2) # 2 seconds timeout
ioloop.add_callback(self.connect, s)
龙卷风errorwarning:
WARNING:tornado.general:Connect error on fd 23: [Errno -2] Name or service not known
答
不知道它的答案,但我认为它帮助(见第三段):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.settimeout(2) # 2 seconds timeout
streamloop.add_callback(self.connect, s)
# added this to close sockets completely after use. might help.
l_onoff = 1
l_linger = 0
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))