반응형
  • 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 클라이언트의 기본적인 함수호출 순서

TCP 클라이언트 함수호출 순서

  • connect 함수

- 클라이언트 socket을 생성한 후 서버로 연결을 요청하는 과정

int connect(int sock,                  // 클라이언트 socket의 file descriptor

struct sockaddr* servaddr,           // 연결 요청할 서버의 주소정보를 담은 변수의 주소값

socklen_t addrlen);                     // 주소정보 변수의 크기를 바이트 단위로 전달

- connect 함수가 호출되면 서버에 의해 연결요청 대기 큐에 등록되거나 네트워크 단절 등 오류 상황이 발생해서 연결요청이 중단되면 함수가 반환

- 클라이언트 socket의 IP, PORT번호가 커널에서 할당(IP: 호스트에 할당된 IP, PORT: 임의)

반응형

+ Recent posts