반응형

listen 함수

 

 

※ TCP 서버에서의 기본적인 함수 호출 순서 

 

아래 그림은 TCP 서버 구현을 위한 기본적인 함수의 호출 순서이다.

 

대부분 TCP 서버 프로그램은 이 순서로 구현된다.

 

-

 

 

-

 

제일 먼저 socket 함수의 호출을 통해서 소켓을 생성한다.

 

그리고 주소 정보를 담기 위해서 구조체 변수를 선언 및 초기화해서

 

bind 함수를 호출하여 소켓에 주소를 할당한다.

 

그리고 이 두 단계는 이미 앞의 글들 중에서 배웠다.

 

-

 

※ 연결 요청 대기상태로의 진입 ※

 

 

bind 함수 호출을 통해서 소켓에 주소까지 할당했다면

 

이번에는 listen 함수호출을 통해서 "연결 요청 대기상태"로 들어갈 차례이다.

 

그리고 listen 함수가 호출되어야 클라이언트가 연결 요청을 할 수 있는 상태가 된다.

 

즉, listen 함수가 호출되어야 클라이언트는 연결요청을 위해서 connect 함수를 호출할 수 있다.

 

(이전에 connect 함수 호출되면 오류가 발생한다.)

 

아래는 listen 함수의 원형이다.

 

-

 

 

-

 

위에 보면 "연결 요청 대기상태"와 "연결 요청 대기 큐"라는 새로운 개념이 나온다.

 

-

 

연결 요청 대기상태 : 클라이언트가 연결 요청을 했을 때 연결이 수락될 때까지 

 

서버 측에서 연결요청 자체를 대기시킬 수 있는 상태에 있다는 것을 의미한다.

 

 

연결요청 대기 큐 : 클라이언트가 연결요청을 했을 때 이 요청들이 서버 측에서 accept 함수로 

 

허락하기 전까지 머물러 있는 일종의 대기실 같은 공간이다.

 

-

 

아래의 그림을 봐보자.

 

-

 

 

-

 

위 그림을 보면

 

listen 함수의 첫 번째 인자로 전달된 파일 디스크립터의 소켓이 어떤 용도로 사용되는지 알 수 있다.

 

클라이언트의 연결 요청도인터넷을 통해서 흘러 들어오는 일종의 데이터 전송이기 때문에

 

이것을 받아들이려면 당연히 소켓이 하나 있어야 한다.

 

서버 소켓의 역할이 바로 이것이다.

 

연결 요청을 맞이하는 일종의 문지기 또는 문의 역할을 한다고 볼 수 있다.

 

즉, 클라이언트 서버 연결 요청을 보내면

 

서버 측에서는 시스템의 상황을 파악하고 클라이언트의 요청

 

일종의 대기실 대기 큐로 안내한다.

 

이렇듯 listen 함수가 호출되면 문지기의 역할을 하는 서버 소켓이 만들어지고

 

listen 함수의 두 번째 인자로 전달되는 정수의 크기에 해당하는 대기실이 만들어진다.

 

그리고 이 대기실을 가리켜 "연결 요청 대기 큐"라고 하며

 

서버 소켓 연결 요청 대기 큐가 완전히 준비되어서 클라이언트의 연결 요청을 받아들일 수 있는 상태를 가리켜

 

"연결 요청 대기상태"라고 한다.

 

listen 함수의 두 번째 인자로 전달될 적절한 인자의 값은 서버의 성격마다 다르지만

 

웹 서버와 같이 잦은 연결 요청을 받는 서버의 경우

 

최소 15번 이상을 전달해야 한다.

반응형

+ Recent posts