2012-03-29 5 views
0

Qt 응용 프로그램에서 Symbian S60 3rd Edition FP2 용 gsoap을 사용하고 있습니다. WS에 5 초마다 여러 요청을하고 있습니다. 2 시간이 지나면 응용 프로그램이 WS에 연결할 수 없게되고 gsoap에서이 오류 28 : SOAP_TCP_ERROR가 표시됩니다. 응용 프로그램을 중지하고 다시 시작하면 WS에 다시 연결할 수 있습니다. 왜 이런 일이 일어나는 걸까요?Gsoap 오류 28 : SOAP_TCP_ERROR

, 내가 그것을 실행할 때마다 나는 WS for 루프에서 호출 gsoap을 넣었습니다 그리고 그것은 892th 시간에 WS에 연결하지 않습니다.

답변

1

당신은 prework으로 몇 가지 작업을 수행 할 수 있습니다

  • 는 gsoap에서 클라이언트 측에서
  • 사용 soap_faultdetail을 DBGLOG 수 있습니다.

99 %는 TCP 연결 시간 초과 오류가 발생하여 연결 핸드 셰이크가 실패한 것입니다. 그렇다면 WS가 어떤 이유로 연결을 수락하지 않았 음을 의미합니다. 문제의 근원은 proxy/firewall/os/buggy ws/driver 사이의 어딘가에있을 수 있습니다. 따라서 재 연결 시도를 사용할 수 있습니다. 나는 심비안에 익숙하지 해요,하지만 윈도우 OS의 재 연결에 내부적으로 수행됩니다

은 재 연결 시도가 두 번 만들어하지만이 동작 중 변경 될 수 있습니다 레지스트리 매개 변수, 드라이버 또는 winsock.

응용 프로그램 수준에서 명시 적 connection-retry 서브 루틴을 작성하고 gSOAP에 강제로 gSOAP 문서 (gSOAP 문서의 후크 섹션 참조)를 강제 실행하거나 오류가 반환되는 경우 soap_connect 몇 번만 호출해야한다고 생각합니다.

참고 : gsoap 수준에서 connection_timeout의 도입이 혼동 될 수 있습니다. 코드에이 코드가없는 경우이 코드를 넣으려는 경우이 시간 제한 내에서 재 연결 시도가 실제로 이루어 졌는지 확인하십시오. 내가 말하고자하는 것은 응용 프로그램이 30 분으로 제한 시간을 설정할 수 있지만 OS가 SYN 패킷을 WS 호스트에 넣는 것입니다. WS 호스트가 어떤 이유로 SYN-ACK로 응답하지 않으면 gsoap의 tcp_connect 서브 루틴이 30 분 낭비 루프가됩니다.