2013-10-07 1 views
0

다음과 같이 CentOS 6.2에서 C 소켓 프로그램을 빌드하고 있습니다.단일 서버 프로그램의 멀티 클라이언트에서 소켓을 닫고 싶지 않습니다.

  1. 서버가 모든 클라이언트의 연결 요청을 수신 대기 중입니다.

  2. 일단 연결되면 클라이언트는 단일 서버로 로그 데이터를 보내기 시작합니다.

문제는 모든 클라이언트가 클라이언트가 연결을 종료 할 때 CLOSE_WAIT 문제를 만드는 동일한 포트로 로그 데이터를 전송합니다.

웹을 서핑하면서 소켓을 닫아 'CLOSE_WAIT'연결을 종료해야한다는 것을 알았습니다. 즉, 서버가 다른 클라이언트 소켓의 로그 데이터를 더 이상 받아 들일 수 없음을 의미합니다.

특정 세션에서 특정 세션을 종료 할 수있는 방법이 있습니까? 가능하지 않다면 다중 서버 리스너를 만들어야합니까?

답변

2

문제는 모든 클라이언트가 클라이언트가 연결을 닫을 때 CLOSE_WAIT 문제를 만드는 동일한 포트로 로그 데이터를 보내는 문제입니다.

아니요. CLOSE_WAIT은 (i) 피어가 연결 종료를 종결했으며 (ii) 로컬 시스템이 로컬 응용 프로그램이 동일한 작업을 수행하기를 기다리고 있음을 의미합니다. 그것은 '모든 TCP 서비스가 작동하는 방법'인 '동일한 포트로'와는 아무런 관련이 없습니다.

은 내가 'CLOSE_WAIT'연결

올바른 죽일 소켓을 닫도록 읽어 보시기 바랍니다.

이는 서버가 다른 클라이언트 소켓의 로그 데이터를 더 이상 허용 할 수 없음을 의미합니다.

아니요. 당신이 청취 소켓을 닫았다면 그 일이 일어날 것입니다. 소켓을 수락해야합니다. 소켓, EOS가있는 소켓입니다.

특정 세션에서 특정 세션을 종료 할 수있는 방법이 있습니까?

소켓을 닫습니다.

가능하지 않은 경우 다중 서버 수신기를 만들어야합니까?

분명히 이미 수행 했습니까?

당신은 이것에 대해 선택의 여지가 없습니다. 소켓을 읽을 때 end-of-stream을 수신하면 더 이상 아무것도 읽을 수 없습니다. 이제까지.

관련 문제