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

- listen 함수
- 연결요청 대기상태: 클라이언트가 연결요청을 했을 때 연결이 수락될 때까지 연결요청 자체를 대기시킬 수 있는 상태
- 클라이언트에서 연결요청이 들어왔을 때 이를 받고 연결요청 대기 큐에 대기시킴
- listen함수가 호출되어야 클라이언트가 연결요청을 할 수 있는 상태가 됨
- 서버 socket이 생성
int listen(int sock, // 연결요청 대기상태에 두고자 하는 서버 소켓의 file descriptor
int backlog); // 연결요청 대기 큐의 크기정보 전달 (클라이언트의 연결요청을 몇 개까지 대기시킬 것인지)
- 웹서버와 같이 잦은 연결요청을 받는 서버의 경우 최소 15이상을 전달해야 함
- accept 함수
- 들어온 순서대로 연결요청을 수락하여 클라이언트와 데이터를 주고받을 수 있는 상태가 됨
int accept(int sock, // 서버 socket의 file descriptor
struct sockaddr*addr, // 연결요청한 클라이언트의 주소정보를 담을 변수의 주소값
socklen_t addrlen); // 주소정보 변수의 변수 크기를 바이트 단위로 전달
- accept함수가 호출되면 클라이언트와의 데이터 송수신을 위한 socket(클라이언트의 연결요청을 받는 서버 socket이 아닌 데이터 송수신을 위한 socket)이 자동으로 생성되고 서버 socket에 연결요청을 한 클라이언트의 socket과 연결
- 데이터 송수신을 위해 생성된 socket의 file descriptor 반환
- 연결요청 대기 큐에서 대기중인 클라이언트의 연결요청을 수락하는 기능
- 클라이언트가 connect 함수를 호출할 때까지 블로킹 상태

- TCP 클라이언트의 기본적인 함수호출 순서

- connect 함수
- 클라이언트 socket을 생성한 후 서버로 연결을 요청하는 과정
int connect(int sock, // 클라이언트 socket의 file descriptor
struct sockaddr* servaddr, // 연결 요청할 서버의 주소정보를 담은 변수의 주소값
socklen_t addrlen); // 주소정보 변수의 크기를 바이트 단위로 전달
- connect 함수가 호출되면 서버에 의해 연결요청 대기 큐에 등록되거나 네트워크 단절 등 오류 상황이 발생해서 연결요청이 중단되면 함수가 반환
- 클라이언트 socket의 IP, PORT번호가 커널에서 할당(IP: 호스트에 할당된 IP, PORT: 임의)
'프로그래밍의 기초 > TCP | IP' 카테고리의 다른 글
에코 클라이언트의 해결책 (0) | 2022.01.11 |
---|---|
Iterative 기반의 서버, 클라이언트 구현 (0) | 2022.01.10 |
TCP와 UDP에 대한 이해 (0) | 2022.01.07 |
인터넷 주소의 초기화와 할당 (0) | 2022.01.07 |
네트워크 바이트 순서 (0) | 2022.01.06 |