【问题标题】:Python socket blocks on "[Errno -2] Name or service not known"?“[Errno -2] 名称或服务未知”上的 Python 套接字块?
【发布时间】:2013-01-28 13:23:00
【问题描述】:

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

【问题讨论】:

    标签: python sockets tornado nonblocking


    【解决方案1】:

    不确定它是否是答案,但我认为它有所帮助(见第三段):

            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))
    

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 2013-07-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      相关资源
      最近更新 更多