2012-08-24 5 views
2

두 개의 서로 다른 컴퓨터에서 실행되는 두 개의 erlang 노드가 있습니다. 한 노드에는 SSL 클라이언트가 있고 다른 한 노드에는 SSL 서버가 있습니다. 두 컴퓨터 모두 Wi-Fi 연결을 통해 인터넷에 연결됩니다.erlang ssl 및 {ssl_closed, 소켓}

모든 것이 제대로 작동하지만 클라이언트 랩톱에서 Wi-Fi를 끄면 {ssl_closed, Socket} 메시지가 수신되지 않습니다.

소켓 옵션은 다음과 같습니다

{active, true}, {keepalive, true} 

내 말은, 소켓이 유효 anymore..right 안?

+0

당신은 알고 계십니까 무엇 keep alive timeout이 시스템에 설정되어 있습니까? 예를 들어, 페도라 리눅스는 7200 초 (2 시간)를 사용합니다. – johlo

+0

아니, 아니, 내가 어떻게 알 수 있니? 그것을 설정해라. 감사합니다! – user601836

+0

추가 정보와 함께 답변을 추가했습니다. – johlo

답변

3

글로벌 TCP keepalive timeout 값은 일반적으로 keepalive 메시지 사이의 7200 초와 같은 값으로 설정됩니다. Linux 시스템을 사용하는 경우 sysctl -a | grep keepalive으로 확인할 수 있습니다.

이 값을 사용하는 것은 전역 구성이므로 권장하지 않습니다. 대신 응용 프로그램 수준 프로토콜에 ping 메시지를 추가해야합니다 (클라이언트가 지금 핑을 보내도록 허용). 서버는 단순히 메시지를 무시할 수 있습니다.

그것은 킵 얼라이브가 inet:setopts/2 기능을 통해 시간 제한과 raw 옵션을 사용하여 소켓 당 설정할 수있을 것 같다,하지만이 권장되는 경우 나도 몰라 (이 플랫폼간에 이식이 아니다)