더북(TheBook)

바인딩 시 특정 주소를 지정하면 소켓이 어느 네트워크 인터페이스를 사용할지 명시할 수 있다. 이는 호스트가 라우터나 네트워크 사이의 브릿지로 사용되는 경우 유용하다. 인터페이스마다 연결된 네트워크가 완전히 다를 수 있기 때문이다. 그렇지만 멀티플레이어 게임 용도로 보면 네트워크 인터페이스가 어느 것인지는 대개 중요치 않고, 오히려 호스트에 장착된 모든 네트워크 인터페이스의 IP 주소의 해당 포트에 몽땅 바인딩하는 것이 바람직할 때가 많다. 이렇게 하려면 바인딩할 주소로 sockaddr_insin_addr 필드에 INADDR_ANY 매크로 값6을 넣어주면 된다.

address_len에는 주소로 넘긴 sockddr의 길이를 넣어주어야 한다. bind() 함수는 성공 시 0을, 실패 시 -1을 리턴한다.

소켓에 sockaddr을 바인딩하는 건 두 가지를 의미한다. 첫째, 운영체제가 이 주소와 포트를 목적지로 발신된 패킷을 수신하면 운영체제는 이제 이 소켓으로 넘겨준다. 둘째, bind()에서 지정한 주소 및 포트를 이 소켓을 통해 나가는 패킷의 네트워크 계층과 전송 계층 헤더의 발신 주소와 포트로 운영체제가 쓰게 된다.

 


 

6  역주 IPv4 주소 0.0.0.0과 동일하다.

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