我在Windows7上使用的是Python3.2.3,其中一段代码通过一个阻塞套接字连接到一个服务器,并使用用户指定的超时值。代码很简单:
testconn = socket.create_connection((host, port), timeout)
代码运行得很好,除了一个奇怪的事实,超时似乎比它在无效请求上应该花费的时间长。我试着连接到www.google.com:59855故意(随机端口应该意味着它应该尝试连接,直到到达超时),超时为5秒,但似乎至少需要15秒才能超时。在
是否有任何可能的原因,和/或任何补救措施?(如果它不可修复,这不是一个大问题,但是如果能找到一个解决方案,我们将不胜感激。)提前谢谢。在
这不是python3或Windows特有的问题。查看create_connection()的文档:http://docs.python.org/library/socket.html#socket.create_connection
重要的片段是:
它使用套接字.getaddrinfo. 如果你跑了
你可能会得到一些返回的结果。当你打电话的时候socket.create_连接,它将迭代所有这些结果,每个结果都等待超时秒,直到失败。因为它等待每个结果的超时秒数,所以总时间显然要大于超时时间。在
如果使用IP地址而不是主机名调用create_connection,例如
^{pr2}$你应该得到5秒的暂停时间。在
如果你真的很好奇,可以看看create_connection的源代码。它非常简单,您可以看到导致您的问题的循环: https://github.com/python/cpython/blob/3.2/Lib/socket.py#L408
相关问题 更多 >
编程相关推荐