TCP 소켓 프로그래밍에서 select와 recv 함수 timeout 시 어떻게 client 들을 다루나요?
글쓴이: chtjddlf / 작성시간: 화, 2013/05/07 - 11:04오전
안녕하세요~ 닉넴 몽키D써리원 입니다.
보통 상용화 프로그램 개발시에
서버에서의 select와 recv 함수 timeout 시 어떻게 client 들을 다루나요?
저 같은 경우에는
select 함수 timeout 시에는 서버에 접속한 모든 클라이언트 접속을 끊어버리구요
recv 함수 timeout 시에는 해당 client만 접속을 끊어버리도록 개발을 하였는데
상용화 프로그램 개발시에 다른 방안들이 있는지 궁금합니다.
Forums:
1:n이든 1:1이든 타임아웃 처리 메커니즘은
1:n이든 1:1이든 타임아웃 처리 메커니즘은 동일합니다.
(어차피 1:1 접속도 1:n 접속의 특수한 형태죠. 구현 방법은 비슷합니다.)
select나 poll로 구현할 경우에는 시간 순으로 정렬된 타임아웃 리스트를 가지고 있고,
리스트의 head에 있는 클라이언트의 타임아웃을 select, poll에 설정하는 방식을 사용합니다.
그리고 타임아웃으로 리턴하면 리스트 맨 앞의 클라이언트 세션을 날리죠.
1:1접속만 사용한다면 이 리스트가 필요없고 select, poll 타임아웃을 그대로 사용하면 되니 매우 단순해지죠.
다중 접속 서버에서 세밀한 타임아웃이 필요 없는 경우엔 초단위나 분단위로 만들어진 버킷에 클라이언트 세션을 넣어두고 버킷 단위로 끊는 경우도 있습니다.
반대로 클라이언트측에서 타임아웃을 구현하도록 강제하는 경우도 있습니다.
========================================
* The truth will set you free.
댓글 달기