CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): bindung ()
날 짜 (Date): 2006년 11월 30일 목요일 오후 07시 05분 21초
제 목(Title): Re: Listen socket을 close하지 않고 conn 



 음.. 질문이 너무 두서없었나요? ^^;

 질문을 간단하게 요약하자면

 listen fd를 닫지 않은 상태에서 client가 접속할 수 없게 하는 방법은?

 입니다.
 
 나머지 이야기들은 왜 fd를 닫을 수 없는가에 대한 얘기 일뿐이지요.

 
 좀더 실제적인 예를 들면

 종료가능한 서버가 한대 있습니다. 그리고 그놈한테 접속하는 클라이언트들이 있지요.

 그런데 클라이언트에서 보기에 서버가 conn reset을 주면 서버가 비정산적으로 죽은걸로

 판단할 작정입니다. 그런데 종료시점에서 서버가 하는 일을 보면

 (아 그리고 그 서버는 bossworker 모델을 사용합니다.)

 먼저 accept하던 thread를 죽입니다. 그다음에 listen socket을 닫습니다.

 그리고 accept되었던 모든 client에 대해 처리가 중료될때까지 기다렸다가 죽습니다.

 그런데 문제가 되는 타이밍은 accept하던 thread가 죽고 socket을 닫기 전에 들어오는

 connection들은 성공해서 backlog에서 대기중입니다만 곧 close할때 rst를 받게 됩니다. 

 이런 놈들을 제거 하고 싶다는 겁니다.

 따라서 그 이전에 fd는 살아있고 backlog에 있는 fd들을 ccept는 할 수 있지만 더이상 

 새로운 connection은 할 수 없는 상태로 만들고 위와같은 종료시나리오를 따라가야 

 할텐데 그 상태를 만들수 있는지 만들수 있다면 어떻게 하는지를 물어본겁니다. ^^


 그리고 shutdown이야기는 걍 실패담입니다. ^^;
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.