멀티 프로세스 서버란, 한번에 하나의 클라이언트에게만 서비스를 제공하는게 아니라 동시에 둘 이상의 클라이언트에게 서비스를 제공하는 서버이다.

 

 

그림처럼 클라이언트의 서비스 요청이 있을 때마다 서버는 자식 프로세스를 생성해서 서비스를 제공한다. 즉, 서비스를 요청하는 클라이언트의 수가 다섯이라면 서버는 추가로 다섯 개의 자식 프로세스를 생성해서 서비스를 제공한다.

이때 자식프로세스를 생성할 때 fork()함수를 사용하는데, fork()함수를 사용하게 되면 부모프로세스의 값을 그대로 복사하기 때문에 파일디스크립터도 복사되서 부모에서 따로 자식에게 소켓의 파일디스크립터를 넘길 필요가 없다.

 

부모 프로세스에서 자식프로세스를 생성하고 파일디스크립터를 넘겨받은 직후의 모습은.

 

이러한 식으로 하나의 소켓에 두개의 파일 디스크립터가 존재하는 경우, 두개의 파일 디스크립터가 모두 소멸되어야 소켓도 소멸된다. 따라서 위와 같은 형태를 유지하면, 자식프로세스가 클라이언트와 연결되어 있는 소켓을 소멸하려 해도 소멸되지 않고 남아있게 된다. 따라서 fork()함수 호출이 후에는 서로에게 상관이 없는 소켓의 파일 디스크립터를 닫아주어야 함.

 

 

 

'Programming > Socket' 카테고리의 다른 글

클라이언트 IP 가져오기  (0) 2012.05.14
멀티프로세스 소스  (0) 2012.05.10
소켓의 옵션  (0) 2012.05.07
TCP server 함수호출 순서.  (0) 2012.04.25
Socket 함수 구조체  (0) 2012.04.24

+ Recent posts