我开始学习python套接字和TCP / IP模型,所以我刚开始。我有这么简单的代码可以按预期正常工作:
import socket
from datetime import datetime
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
start = datetime.now()
try:
s.connect(("www.stackoverflow.com", 80))
s.close()
except Exception as e:
print "Error : ", e
print datetime.now() - start
在这种情况下它可以正常工作,但如果我更改端口并使用另一个端口,例如81(仅用于测试),则套接字不会连接(如预期的那样)。 但是我必须在执行print语句(最后一行)之前等待大约20秒。 我想了解如何让它更快,所以当连接失败或端口关闭时,我收到响应错误,我不会等待那么多时间。 此外,我想了解为什么它有这种行为,以及如何正确设置超时。 可能这是一个新手问题,但您的所有回复和建议都会受到欢迎。 非常感谢。
答案 0 :(得分:1)
使用socket.settimeout()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1.0)
这会将超时设置为1秒。
socket.settimeout(值)
阻止套接字操作设置超时。 value参数可以是表示秒的非负浮点数,也可以是None。如果给出了float,则如果在操作完成之前已超过超时时间值,则后续套接字操作将引发超时异常。将超时设置为None会禁用套接字操作的超时。 s.settimeout(0.0)等价于s.setblocking(0); s.settimeout(None)等同于s.setblocking(1)。