2013-11-04 4 views
0

으로 응답하고 나는 현재 내가 수행 쉽게 libcurl에 사용하고 보안 메시지 전송에FIN은 서버에서 수신하지만 연결은 내가 libcurl에 사용하고 libcurl에

"연결이 죽은 것 같다"으로 직면하고있는 문제에 대한 몇 가지 정보가 필요 SSL 지원 (TLS)을 사용하여 서버에 연결하십시오.

그러나 높은 수준에 나는 인터넷의 주위에 충분한 정보를보고 있지 않다 직면하고있는 문제 (내가 바로 단어를 찾고 있지 않다 할 수있다)

이 발생하는 것이다. 서버와 성공적으로 연결할 수 있으며 데이터를 보내고받을 수 있습니다. 작은 창 (15 초) 동안 세션을 유휴 상태로 유지하고 추가 트랜잭션/메시지를 트리거하면 libcurl의 콘솔 로그에 "연결이 죽은 것으로 보입니다"및 "다시 연결"되는 것으로 나타납니다. 쉬운 연주로 컬이 자연스럽게 시간을 초과하면 거기에 걸리고 타임 아웃됩니다.

기존 연결을 다시 사용하기 전에 "wireshark"를 실행하고 분석하여 서버에서 "FIN, ACK"및 "ACK"패킷을 받았습니다. 하지만 클라이언트에서 서버로의 ACK로 서버에 응답하기 위해 상당한 시간을 기다렸으므로 서버가 내 미래의 요청을 존중하지 않는다고 생각합니다.

FIN에 대해 서버에 즉시 응답 할 수있는 방법이 있습니까, 연결 중에받은 ACK입니까?

는 libcurl에서이 문제인가, 아니면 내가 u는 내 conection에

+0

두 가지를 제안합니다. 서버는 단지 15 초간의 유휴 상태 후에 연결을 닫아서는 안되지만, libcurl은 이것을 마치 클로저로 인식해야한다. 또한 FIN 이전에 SSL close-notify가 있었어야하고 libcurl도이를 인식해야합니다. 아니면 응용 프로그램 코드에서 직접 스트림을 끝내는 것을 인식하지 못하고 있습니까? – EJP

+0

나는 시도했다. 그러나 어떤 통지도 전혀 보지 않고있다. 다음 요청이 전송 될 때만 libcurl은 번들에서 연결을 재사용하기 전에 상태를 확인한 다음 서버가 FIN_WAIT에 갈 수있을만큼 지연 될 수있는 시간까지 닫으려고합니다. 레벨은 무한 "정지"입니다. 하지만 난 나쁜 솔루션을 설정할 때 시도하기 전에 마지막 소켓을 확인하는 것입니다 한 솔루션을 시도했다. 내가 easy_cleanup()을 호출 한 다음 easy_init()를 호출하는 것이 좋지 않을 때. 그러나 아직도 이런 식으로 확신하지 못합니다. 어떤 코멘트? –

답변

-1

의 중간에 FIN, ACK를보고있는 이유 서버 팀해야합니까 얘기한다 TCP 연결 유지 클라이언트/서버 사이에 돌았 다. 컬에 지정된 값을 유지하십시오. 적절한 keep alive 간격은 클라이언트가 아무 것도 보내지 않으면 연결이 살아 있는지 확인합니다. libcurl에 도움이 문서에서

: CURLOPT_TCP_KEEPALIVE

긴 패스. 1로 설정하면 TCP keepalive 검사가 전송됩니다. 이러한 프로브의 지연 및 빈도는 운영 체제에서 지원하는 경우 CURLOPT_TCP_KEEPIDLE 및 CURLOPT_TCP_KEEPINTVL 옵션으로 제어 할 수 있습니다. Keepalive 프로브를 비활성화하려면 0 (기본 동작)으로 설정하십시오.

+0

불행히도 그것은 나에게 도움이되지 못했습니다. –

+0

살아있는 기간을 어떻게 유지합니까? SYNC가 그 간격으로 나가는 것을 보았습니까? 서버가 여전히 FIN을 보내는 경우 서버 로직을 확인해야합니다. U는 SSL 손 흔들림이 좋았고 데이터가 교환되었으므로 SSL 문제가 아닙니다. – ptrehan

+0

TCP Keepalive는 FIN의 작동 여부와 관련하여 무엇을해야합니까? – EJP

관련 문제