Python socket在"[Errno -2] 未知的名称或服务"上阻塞?
我在Tornado的IOLoop中异步运行非阻塞的套接字。但是,尽管如此,有时候还是会出现阻塞(这时CPU使用率为0%),并且总是会导致一个错误:Errorno -2 Name or service not known
。
这为什么会发生呢?
它会阻塞大约五秒钟(至少超过了两倍的超时时间)。在任何时候,可能会有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)
Tornado错误警告:
WARNING:tornado.general:Connect error on fd 23: [Errno -2] Name or service not known
1 个回答
0
我不确定这是不是答案,但我觉得这对我有帮助(见第三段):
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))