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