在Python中设置getaddrinfo()的超时

时间:2010-09-27 20:59:36

标签: python sockets timeout

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

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

例如,我想这样做:

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

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

1 个答案:

答案 0 :(得分:4)

我的理解是getaddrinfo是OS提供的库的包装:

在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无法直接为您提供。 您必须使用线程进行编码或使用第三方库。