在Python中为getaddrinfo()设置超时
在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 不能直接提供这个功能。你要么自己写代码用线程来实现,要么使用第三方库。