2

我在 Tornado IOLoop 中异步运行非阻塞套接字。但是,尽管如此,有时会出现块(如 0% CPU 所证明的那样),并且总是导致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)

龙卷风错误警告:

WARNING:tornado.general:Connect error on fd 23: [Errno -2] Name or service not known
4

1 回答 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))
于 2013-03-11T18:06:06.117 回答