2010-03-01 2 views
0

연결 실패 여부를 테스트하려고 시도했지만 불행히도 호스트의 IP 주소에 방화벽이없는 경우에는 실패하지 않습니다. 내가 알고있는 서버에 연결할 수 있지만 잘못된 사용자 이름을 지정하려고하면Python DBAPI가 연결 시간 초과입니까?

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

맞춤법/문법 나치 시간 : Pythobn -> Python, fire walled -> firewalled. 오, 그리고 마지막 줄은 네 칸에 들여 쓰이지 않습니다. –

답변

0

발생한 문제는 방화벽의 고통이며 시간 초과는 일반적인 TCP 시간 초과입니다.

+0

방화벽/바보 같은 "편집증 적"방화벽/실제로는 DROP 규칙의 결과입니다. 적절한 방법은 실제로 tcp-reset ICMP 패킷 (IIRC)으로 응답하는 것입니다. –

0

보통 connect 함수에서 timeout 인수를 전달할 수 있습니다. 당신이 만드는

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

이 모든 연결이 설정을 적용합니다 (기반 소켓) 및 대기의 10 초 후에 실패 : 존재하지 않는 경우에 당신은 socket.timeout 또는 default timeout으로 시도 할 수 있습니다.