더북(TheBook)

3.3.3 소켓 바인딩하기

운영체제에 어떤 소켓이 특정 주소와 전송 계층 포트를 쓰겠다고 알려주는 절차를 일컬어 바인딩(binding)이라 한다. 소켓에 어떤 주소와 포트를 직접 바인딩하려면 bind() 함수를 호출한다.

int bind(SOCKET sock, const sockaddr* address, int address_len);

sock은 바인딩할 소켓으로, 앞서 socket() 함수로 만든 것이다.

address는 소켓을 바인딩할 주소이다. 이는 패킷을 보낼 주소와는 전혀 상관이 없음을 알아두자. 목적지를 가리키는 것이 아니라 이 소켓으로 보내는 패킷의 발신지, 즉 회신 주소를 밝혀 두는 것이라 생각하면 된다. 어차피 보내는 패킷의 회신 주소는 모두 이 호스트의 주소일 텐데 왜 굳이 회신 주소를 정하는지 의아할 수도 있겠다. 그 이유는 바로 호스트에 여러 개의 네트워크 인터페이스가 장착되어 있는 경우도 있으며, 이들 각각 저마다의 IP 주소가 있기 때문이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.