반응형
accept 함수
listen 함수 호출 이후에 클라이언트의 연결 요청이 들어왔다면
들어온 순서대로 연결 요청을 수락해야 한다.
연결요청을 수락한다는 것은 클라이언트와 데이터를 송수신할 수 있는 상태가 된다는 것을 의미한다.
따라서 이 상황에서도 소켓이 필요하다.
이미 서버 소켓이 존재하지만 이 서버 소켓은 문지기이다.
클라이언트와의 데이터 송수신을 위해 서버 소켓을 사용하면 문지기가 없어지는 것이다.
그러므로 소켓을 하나 새로 생성해야 하지만
accept 함수를 호출하면 소켓이 자동으로 생성되고
이 소켓은 연결 요청을 한 클라이언트 소켓과 자동으로 연결된다.
-
-
accept 함수는 "연결 요청 대기 큐"에서 대기 중인클라이언트의 연결 요청을 수락하는 기능의 함수이다.
그렇기에, accept 함수는 호출 성공 시 내부적으로 데이터 입출력에 사용할 소켓을 생성하고
그 소켓의 파일 디스크립터를 반환한다.
중요한 것은 자동으로 소켓이 생성되고, 연결 요청을 한 클라이언트 소켓에 연결까지 이뤄진다는 점이다.
아래의 사진은 accept 함수 호출 시 일어나는 상황이다.
-
-
위 그림에서 대기 큐(Queue)에 존재하던 연결요청 하나를 꺼내서
새로운 소켓을 생성한 후에 연결 요청을 완료한다.
이렇듯 서버에서 별도로 생성한 소켓과 클라이언트 소켓이 직접 연결된다.
-
다음 포스팅에서 TCP 서버의 코드와 동작에 대해 알아보자.
반응형
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스) Client 프로그램의 기본적인 함수호출 순서 (0) | 2021.02.03 |
---|---|
(리눅스) Server 프로그램 분석 (0) | 2021.02.03 |
(리눅스) listen 함수로 연결요청 대기상태로 만들기 (0) | 2021.02.03 |
각 계층들의 개념 LINK, IP, TCP/UDP (0) | 2021.02.03 |
TCP/IP 프로토콜의 탄생배경 (0) | 2021.02.03 |