2012-06-25 6 views
0

원격 위치에서 계측기를 모니터링하기 위해 Graphite 서버를 실행 중입니다. 내 서버의 로컬 포트를 내 서버의 로컬 포트에 매핑하는 "영구"ssh 터널을 내 서버 (좋아하는 autossh)의 컴퓨터에 연결합니다. 이것은 잘 작동하며, 데이터는 아무런 영향도 미치지 않습니다. 그러나 우리는 사이트에 얇은 위성 연결을 사용합니다. 나는 "데이터 크롤러 (data crawler)"를 실행하여 파이썬을 실행하고 소켓을 사용하여 패킷을 흑연 서버에 전송합니다. 문제는 링크가 일시적으로 중단되거나 (주로 서버가 재부팅되는 경우) 서버에 대한 연결을 다시 설정할 수 없다는 것입니다. 나는 오류를 잡아 냄 다음 socket.close()를 실행하고 다시 연다.하지만 연결을 다시 설정할 수 없다. 파이썬 프로그램을 종료하고 다시 시작하면 연결이 정상적으로 작동합니다. 어떻게하면 소켓 연결을 새로 고칠 수 있습니까?python - 서버를 일시적으로 사용할 수 없게되면 클라이언트에서 소켓 연결을 다시 시작할 수 없음

+0

일부 코드를 표시 할 수 있습니까? 그렇지 않으면 어떤 대답도 부정확 할 것입니다. (코드를 형식화하기 위해 줄 바꿈시 4 칸을 사용하십시오) – User

+0

더 많은 시간이 걸릴 때'socket.settimeout (seconds)'을 시도하십시오 – User

답변

0

코드 샘플없이 올바르게 대답하기 어렵습니다. 그러나 닫힌 socket을 다시 사용하려는 것 같지만 불가능합니다.

소켓이 닫혀 있거나 오류가 발생하면 새 소켓 개체를 사용하여 새 연결을 다시 만들어야합니다. 이렇게하려면 원격 서버가 accept() 루프에서 여러 클라이언트 연결을 처리 할 수 ​​있어야합니다.

+0

이것이 제가 생각하는 문제입니다. 통찰력에 감사드립니다. 변수를 삭제하고 객체를 None으로 설정 한 다음 새로운 socket.socket()을 수행했지만 인터프리터가 서버에 연결을 거부하면 처음에는 연결을 거부합니다. 코드의 해당 부분에 가깝게되기 전에). – 10k3y3

+0

서버의 accept() 루프가 여러 동시 연결을 처리하지 못할 수도 있습니다. 관련 서버 및 클라이언트 비트의 일부 코드 샘플을 제공하려는 경우이를 해결하는 데 도움이 될 수 있습니다. – gabrtv