서버가 리스닝 및 연결을 처리하는 절차와 거기에 접속하는 클라이언트의 절차가 서로 일대일 대칭 관계는 아니다. 서버는 listen() 상태에서 accept()를 호출해 접속을 기다려야 하지만 클라이언트는 소켓을 만든 다음 connect()만 호출하면 된다. 그러면 바로 해당 원격 서버에 접속해 핸드셰이킹 절차를 시작하게 된다.
int connect(SOCKET sock, const sockaddr* addr, int addrlen);
sock은 연결에 사용하고자 하는 소켓이다.
addr은 연결하고자 하는 원격 호스트의 주소를 가리키는 포인터이다.
addrlen은 addr 인자의 길이이다.
성공 시 connect()는 0을 리턴하고 에러가 있는 경우 -1을 리턴한다.
connect()를 호출하면 최초 SYN 패킷을 대상 호스트에 전송하여 TCP 핸드셰이킹을 개시한다. 원격 호스트에 해당 포트로 바인딩한 리스닝 모드 소켓이 있는 경우, 서버 원격 호스트는 accept()를 호출해 이 핸드셰이킹을 처리한다. 별다른 옵션을 지정하지 않으면 connect() 호출 시 호출 스레드는 연결이 수락되거나 시간이 초과될 때까지 블로킹된다.