2010-09-27 40 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