0

我试图测试连接失败,不幸的是,如果主机的 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 地址时,如何等待或测试超时而不是让我的应用程序看起来挂起?

4

2 回答 2

0

您正在经历的是防火墙的痛苦,超时是正常的 TCP 超时。

于 2010-03-01T11:27:12.830 回答
0

您通常可以在连接函数中传递超时参数。如果它不存在,您可以尝试使用 socket.timeout 或默认超时

import socket
socket.setdefaulttimeout(10) # sets timeout to 10 seconds

这将将此设置应用于您创建的所有连接(基于套接字),并在等待 10 秒后失败。

于 2010-03-01T11:30:06.977 回答