Skip to content

Study : CPP : connect

KIM JEONGJUN edited this page Apr 4, 2022 · 1 revision
항목 내용
일자 220330
작성자 jekim
제목 connect()
한줄요약 클라이언트의 연결요청 함수인 connect()에 대해 알아보기

connect()

prototype

int connect(int sock_fd, const struct sockaddr *addr, socklen_t addrlen)
{
    error return -1;
    normal return 0; // 커넥션 || 바인딩 성공 
};

매개변수로 넣은 sock_fd와 addr 구조체를 기반으로 연결을 수행합니다. 세 번째 매개변수인 addrlen은 addr 구조체의 사이즈를 나타냅니다.

SOCK_DGRAM 과 같은 비연결 지향 타입의 경우에는 데이터 다이어그램을 보낸다. SOCK_DGRAM을 기반으로 한 UDP 연결체계는 기본적으로 connectionless 이기에 connect()가 필요하지는 않지만, UDP hole punching 과 같은 특수한 상황에서 이를 필요로 하기도 한다.

SOCK_SEQPACKET 이나 SOCK_STREAM 같은 연결 지향 타입의 경우에는 addr로 정의된 연결체계로 서버와 클라이언트 간의 연결을 수립한다.

프로토콜 별로 connect()를 필요로 하는지, 혹은 한 번 / 다수로 걸 수 있는지가 다르다. 예를들어...

  • UNIX domain stream 의 경우에는 커넥션을 한 번만 걸 수 있다.
  • UNIX 혹은 인터넷 환경의 datageram socket 의 경우에는 연결 변경을 위해 여러번 수행할 수 있다.
  • TCP socket 의 경우에는 연결 이후 수행한 연결을 해제해 줄 수 있다. 이 경우 다른 주소에 연결이 가능해진다.

// uploaded 220404