2012-02-26 8 views
1
내가 서버에 연결 파이썬 소켓을 사용하고

하지만 때로는 난이 얻을 : 파이썬 소켓의 errno 10060

error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

내가

s= socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((self._ipv4address, host_port)) 
try: 
    s.connect((dest_ip, dest_port)) 
except: 
    raise 

왜 오전를 Socket.connect 방법을 호출

이 오류가 표시됩니까? 어떻게 문제를 해결할 수 있습니까?

+1

서버가 일정 기간 후에 제대로 응답하지 않았기 때문에 발생했을 수도 있습니다 ... – snapshoe

+0

하지만 서버에 문제가없는 것은 확실합니다. (이것이 의미하는 것이면) 웹 사이트를로드하려고합니다. 웹 사이트가 내 프로그램을 사용하지 않고 브라우저에서 제대로 열립니다. 유일한 문제는 약간 크다는 것입니다. –

+0

브라우저에서 _sometimes _ 발생하지 않는 것이 확실합니까? 10060이 시간 초과 오류 인 것 같습니다. 서버가 연결을 받아들이는 속도가 매우 느리고 (바쁜 소년) 브라우저가 더 높은 시간 제한 임계 값을 가질 수 있습니까? 소켓을 로컬 주소에 바인딩해야합니까? (나는 때때로 _ 이유가있을 수 있다고 생각할 수도 있습니다.) – tomasz

답변

3

소켓을 바인딩 할 필요가 없습니다 (원격 서버가 들어오는 소켓을 기대하지 않는 한). 실제로 연결하는 것이 거의 필요하지 않습니다.

소켓을 사용하여 웹 사이트를 여는 대신 양식을 트위닝해야하는 경우 urllib2 또는 mechanize을 사용하십시오. 그들은 쿠키, 세션, 페이지 상태 등을 관리합니다. 훨씬 쉬워졌습니다.

또한 연결에 실패하면 .. 포기하지 마세요! 다시 시도해보십시오. 일부 사이트는 반응하기가 쉽지 않습니다. 일부는 잠시 응답하지 않을 수 있습니다 - 더 잘 처리하십시오. 오류를 제기하는 대신 연결 방법을 exponential backoff 데코레이터로 래핑하십시오.

+1

지수 백 오프가 작동하고있는 것 같습니다. , 그 패턴에 대해 몰랐어 ... 감사합니다 많은 친구 :) –