是否可以在CPython 2.7中的getaddrinfo()调用上设置超时?
socket.setdefaulttimeout()执行不。我真的不想要一个使用线程或信号包装函数的解决方案。最好只使用标准库的解决方案,但使用第三方软件包是可以接受的。
例如,我想这样做:
socket.getaddrinfo("""!@#$%^&*()+=-[]\\\';,./{}|\":<>?~_""", None)
让它在1秒内引发socket.error。 (请注意,当我在OS X上运行它时,它会快速超时,但在Debian上运行需要大约60秒才能失败)。
答案 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无法直接为您提供。 您必须使用线程进行编码或使用第三方库。