2011-02-10 4 views
2

나는 리눅스 아키텍처에서 코딩을하고있다. 소켓 서버와 클라이언트에 관한 질문이 있습니다. 서버가 연결을 계속 받아들이고 클라이언트가 서버에 연결되는 샘플 코드를 만들었습니다. 네트워크 연결이 끊어져 클라이언트의 연결이 끊어 졌음을 알릴 수 없기 때문에 누군가가 네트워크 케이블을 분리하여 클라이언트 (클라이언트 소켓이 PC에서 연결이 끊어짐)가 연결되어있는 상태에서 서버 측 연결이 아직 활성 상태 인 경우 네트워크 케이블이 분리되었습니다.알 수있는 방법 소켓 클라이언트의 연결이 끊어 졌습니까?

어떻게 클라이언트의 연결이 끊어 졌는지 알 수 있습니까?

감사합니다, 모든 소켓 타입에 대한 읽기 로컬 소켓과 EOF에 대한 닐

답변

0

SIGPIPE.

+0

읽어 하나 개의 스레드가 차단되는 동안 내가 읽기에 오류가 발생했습니다를하지만 항상 내가 읽기에 오류가

이 답변을 참조하십시오. 소켓이 단절되었음을 알 수있는 정확한 방법은 무엇입니까? –

1

소켓에서 Keepalive를 구성하거나 응용 프로그램 수준의 하트 비트 메시지를 보내야합니다. 그렇지 않으면 수신 대기자가 패킷이 도착할 때까지 무기한 대기합니다. 프로토콜을 제어하면 응용 프로그램 수준 하트 비트가 더 쉬울 수 있습니다. 장점은 네트워크의 NAT 게이트웨이간에 연결을 유지하는 데 도움이됩니다. Is TCP Keepalive the only mechanism to determine a broken link?

는 또한이 리눅스 문서를 참조하십시오 : http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/#programming

관련 문제