代码之家  ›  专栏  ›  技术社区  ›  Tony Meyer

在python中设置getaddrinfo()的超时

  •  1
  • Tony Meyer  · 技术社区  · 14 年前

    是否可以在cpython 2.7中设置getaddrinfo()调用的超时?

    socket.setDefaultTimeout()执行 工作。我不希望使用线程或信号包装函数的解决方案。一个只使用标准库的解决方案是最好的,但是使用第三方包是可以接受的。

    例如,我想这样做:

    socket.getaddrinfo("""!@#$%^&*()+=-[]\\\';,./{}|\":<>?~_""", None)
    

    让它在1秒内引发socket.error。(请注意,当我在OSX上运行这个命令时,无论如何都会很快超时,但是在Debian上运行它需要大约60秒才能失败)。

    1 回复  |  直到 14 年前
        1
  •  4
  •   pyfunc    14 年前

    我的理解是getaddrinfo是操作系统提供的库的包装器:

    在UNIX上:

    int getaddrinfo(const char *nodename, const char *servname,
                    const struct addrinfo *hints, struct addrinfo **res);
    

    在Windows上:

    int WSAAPI getaddrinfo(
      __in_opt  PCSTR pNodeName,
      __in_opt  PCSTR pServiceName,
      __in_opt  const ADDRINFOA *pHints,
      __out     PADDRINFOA *ppResult
    );
    

    它们的任何一个使用都没有超时值,因此Python不能直接提供您。 您必须使用线程或第三方库编写代码。