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 に答える