【问题标题】:Set timeout on getaddrinfo() in Python在 Python 中设置 getaddrinfo() 超时
【发布时间】:2010-09-27 20:59:36
【问题描述】:

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

socket.setdefaulttimeout() 确实 工作。我真的不想要一个使用线程或信号包装函数的解决方案。只使用标准库的解决方案是最好的,但使用第三方包也是可以接受的。

例如,我想这样做:

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

让它在 1 秒内引发 socket.error。 (请注意,当我在 OS X 上运行它时,它很快就会超时,但在 Debian 上运行它大约需要 60 秒才能失败)。

【问题讨论】:

    标签: python sockets timeout


    【解决方案1】:

    我的理解是 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 无法直接为您提供。 您必须使用线程编写代码或使用第三方库。

    【讨论】:

      猜你喜欢
      • 2013-08-15
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 2017-10-07
      • 2013-02-03
      相关资源
      最近更新 更多