[완료]멀티포크 방식에서 부모 프로세스가 wait 할 경우 새 접속요청을 못 받나요?
글쓴이: trymp / 작성시간: 목, 2009/08/06 - 4:55오후
서버-클라이언트 구조에서 멀티포크 방식을 사용한다고 했을때,
서버가 listen 하고 있다가 접속이 오면 fork() 해서 소켓에 대한 제어권을 자식프로세스에게 넘겨주잔아요
또한 자식프로세스가 죽는 상태를 대비해 SIGCHLD 와 관련된 시그널 함수를 등록을 하고,
함수안에서는 wait() 나 wiitpid() 를 이용해서 자식프로세스가 정상적으로 죽는 것을 기다리는 것으로 알고 있습니다.
wait() 너무 오래 기다리게 되면 클라이언트의 접속 요청을 listen() 에서 못 받지 않나요?
wait() 가 얼마나 오래 기다리는지 감이 안오고 wait()에 의해 블럭된 경우 서버가 정말 아무것도
못하는지 알고 싶습니다.
고수님들의 많은 도움 부탁드립니다.
Forums:
manual 을 참조하세요.
man wait
man waitpid
해서 잘 읽어 보시면 답이 나옵니다.
wait를 사용했을 경우라면, parent 는 child 중 누군가가 종료할 때 까지 아무것도 안 하게 됩니다. 간단하게 생각해 보시면, 서버가 read 하고 있는데 client 가 send 하지 않으면 아무것도 안 하고 있는 것과 동일하다고 보시면 됩니다.
이를 피하기 위해서는 waitpid 에 options 부분을 보시면, WNOHANG 이란 것이 있습니다. 이를 이용하면 wait 에서 기다리지 않고 단순히 child 중 종료한 놈이 있는가를 검사하여, 종료한 놈이 있으면 처리를 해 주는 방식을 취해 주면 됩니다.
자세한 것은 manual 을 읽어 보세요.
댓글 달기