我正在尝试测试连接失败,不幸的是,如果主机的IP地址是防火墙,它并没有失败。
这是代码:
def get_connection(self, conn_data):
rtu, hst, prt, usr, pwd, db = conn_data
try:
self.conn = pgdb.connect(host=hst+":"+prt, user=usr, password=pwd, database=db)
self.cur = self.conn.cursor()
return True
except pgdb.Error as e:
logger.exception("Error trying to connect to the server.")
return False
if self.get_connection(conn_data):
# Do stuff here:
如果我尝试连接到已知服务器但提供的用户名不正确,则会触发异常并失败。
但是,如果我尝试连接到没有响应的机器(防火墙),它永远不会通过self.conn = pgdb.connect()
当用户输入错误的IP地址时,如何等待或测试超时,而不是让我的应用程序显示挂起?
答案 0 :(得分:0)
您遇到的是防火墙的痛苦,超时是正常的TCP超时。
答案 1 :(得分:0)
您通常可以在connect函数中传递timeout参数。如果它不存在,您可以尝试使用socket.timeout或default timeout:
import socket
socket.setdefaulttimeout(10) # sets timeout to 10 seconds
这会将此设置应用于您所做的所有连接(基于套接字),并在等待10秒后失败。