Parent process
accept loop
연결을 수락하고 fork한 뒤 다음 연결을 기다린다.
server_fdlisten
client_fdclose in parent
→
Child process
handle_client
한 클라이언트의 recv/send 루프를 담당한다.
server_fdclose in child
client_fdread/write
장점
격리
자식 하나의 오류가 다른 연결에 번질 가능성이 낮다.
비용
프로세스 생성
메모리, 스케줄링, 컨텍스트 스위칭 비용이 커진다.
정리
좀비 방지
SIGCHLD 무시 또는 waitpid 반복 호출로 종료 상태를 회수한다.
fd 소유권
fork 직후에는 부모와 자식이 같은 열린 파일 설명을 공유한다. 불필요한
fd를 닫아야 연결 종료와 자원 회수가 예측 가능해진다.