在Python中为getaddrinfo()设置超时

1 投票
1 回答
2579 浏览
提问于 2025-04-16 04:40

在CPython 2.7中,能否给getaddrinfo()这个调用设置超时时间?

socket.setdefaulttimeout()这个方法不行。我其实不想用线程或者信号来包装一个函数的解决方案。最好的办法是只使用标准库,但如果需要用到第三方包也是可以接受的。

举个例子,我想这样做:

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

然后希望它在1秒钟内抛出一个socket.error的错误。(注意,当我在OS X上运行这个时,它很快就超时了,但在Debian上运行时大约需要60秒才会失败)。

1 个回答

4

我的理解是,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 不能直接提供这个功能。你要么自己写代码用线程来实现,要么使用第三方库。

撰写回答