2013-02-13 43 views
2

我在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 

回答

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)) 
相關問題