더북(TheBook)

일반적으로 주소와 포트 쌍 하나당 하나의 소켓만 바인딩할 수 있다. 이미 사용되고 있는 주소와 포트 조합에 바인딩을 시도하면 bind() 함수가 에러를 리턴할 것이다. 이 경우 아직 사용 중이지 않은 포트를 찾을 때까지 반복해서 여러 포트에 바인딩을 시도해 보아야 한다. 보다 효율적으로 하려면 bind() 호출 시 포트에 0을 지정하면 된다. 그러면 라이브러리가 자동으로 사용 중이지 않은 포트 하나를 골라 바인딩해 준다.

데이터를 전송하거나 수신하려면 반드시 소켓이 바인딩되어 있어야 한다. 만일 아직 바인딩되지 않은 소켓으로 데이터를 보내려 하면 네트워크 라이브러리는 먼저 자동으로 남아 있는 포트에 소켓을 바인딩해 준다. 따라서 주소와 포트를 확실히 고정해두려는 것이 아니라면 굳이 바인딩할 필요가 없다. 단, 외부에 공표한 주소와 포트로 패킷을 받아야 하는 서버를 만들 때는 바인딩이 필요할 것이다. 클라이언트를 만들 때는 굳이 바인딩할 필요가 없는데, 패킷을 처음 보낼 때 주소와 포트를 자동으로 운영체제가 선택해 주기 때문이다. 나중에 회신을 받을 때도 그 주소와 포트로 받게 된다.

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