2010-09-27 39 views
1

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

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

例如,我想这样做:

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

而且有它在1秒内养socket.error。 (请注意,当我在OS X上运行它时,无论如何都会很快超时,但在Debian上运行需要大约60秒的时间才能失败)。

回答

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不能直接提供给你。 您必须使用线程编码或使用第三方库。

+0

或使用信号。 – 2010-09-27 22:51:00