Socket Process ... ESTABLISHED
글쓴이: ycode / 작성시간: 수, 2003/04/23 - 1:06오후
At first, sorry for writing in poor english.
I could not type in korean, and faced to emergency now.
Question :
I have S/C program using socket.
I found forked child server process did not exit - usually exit well.
so, when i checked netstat, status was " ESTABLISHED"!!!
Anyone can tell me, how can figure out this?
Then, Is it ok having question like this?
Forums:
Re: Socket Process ... ESTABLISHED
당연히 접속이 되어있으면 ESTABLISHED 로 나옵니다. child프로세스가 종료하지 않는 것은 그 안에 recv함수나 혹은 그와 같은 기능을 하는 함수에서 블록킹을 하기 때문이겠죠. 접속이 끊어지면 0를 리턴하므로 그것을 체크해서 빠져나오시면 됩니다. 현재 상황은 아주 정상적인 상황인듯 싶군요. 클라이언트 프로그램이 계속 접속하고 있는데 그것을 꼭 서버가 끊어야 하는 상황이 아니면 정상적으로 보입니다.
또한 자식 프로세스가 죽을 때 SIGCHLD가 나오므로 wait로 체크해서 자원을 거두어 들여야 하며, 이것을 하지 않을때 <defunc>프로세스가 생기게 됩니다. 만일 이것이 귀찮다면 SIG_IGN으로 SIGCHLD를 무시해버리면 됩니다.
그리고 C/S프로그램이라고 하다고 S/C라고 하니 어감이 조금 이상하네요. ^^*
========================================
* The truth will set you free.
Re: Socket Process ... ESTABLISHED
Thank you for quick reply!
This is what i wanted to know. Thanks a lot.
Then, if my program was client? and server PG did not receive any data? Server and Client, which side is wrong? What reason make this condition?
Yes, it's already done.
It really does ... I was not in my right mind. sorry ^^;;;
여러가지 방법이 있습니다.
특정 connection이 아무런 일도 하지 않는 것인데 세션을 계속 열고 있는 것을 방지하기 위해서 일부러 몇가지 규약이 필요합니다. 일단 보편적인것 두가지를 나열하겠습니다.
1. heartbeat
이것은 특정 시간마다 패킷을 보내서 서로 살아있음을 응답하게 하는것입니다. 응답하지 않으면 예외시간을 다시 두고 응답을 요구한뒤 그래두 없으면 강제종료 시켜버리죠.
2. timeout
이것은 그냥 timeout을 설정합니다. 일단 기본적으로 가장 쉽게 구현하기 위해서는 select와 같은 것으로 time아웃을 걸고 해당 시간이 지났는데 응답이 없는 녀석들은 모조리 숙청하는것이죠.
이 두가지가 보통 사용합니다. 개인적으로 신뢰성을 생각한다면 1번이 더 좋다고 생각됩니다.
========================================
* The truth will set you free.
댓글 달기