[시스템프로그래밍] INADDR_ANY == 0.0.0.0

그린·2023년 6월 18일
0

기타등등

목록 보기
4/9

시스템프로그래밍 시험 공부를 하다가 bind()에서 INADDR_ANY를 사용하는 코드를 배우게 되었다.
예약어인 것인지 앞에서 특별한 선언 없이 이 변수를 바로 사용하고 교수님께서도 어디서 들어오든지 다 받겠다는 뜻이라고만 설명해주셔서, 이 INADDR_ANY가 내가 아는 0.0.0.0이랑 같은 것인지 궁금해졌다.

(별 것 아니긴 하지만 그냥 이 강의자료에만 추가로 적기에는 조금 아까워서 블로그에도 남겨본다.)

코드는 다음과 같다.

  • bind() : 인터넷 주소와 포트번호를 소켓에 할당
#define SIZE sizeof(struct sockaddr_in)
int main()
{
  int sock1;
  struct sockaddr_in addr;
  addr.sin_family = AF_INET;
  addr.sin_port = 5000;
  addr.sin_addr.s_addr = INADDR_ANY; // 어떤 IP주소에서 들어오든지 다 받겠다.
  ...
  (후략)

결론부터 말하자면 같다!
좋은 글을 찾게 되어서 인용을 해보겠다.

  • INADDR_ANY
    • 실제로 선언된 매크로를 따라가보면 0x00000000 으로 선언되어 있다.
      -> 0.0.0.0을 가리킴
    • IPv4 주소 체계에서 0이나 127로 시작하는 IP주소는 A 클래스에 속해야 하지만, 예약으로 인해 제외되어 있다.
      -> 따라서 0.0.0.0은 임의로 자신의 IP를 가리키게 됨.
      -> 0.0.0.0으로 선언하면 자신의 호스트에 들어오는 패킷을 무조건 수신
    • 이유 :
      서버의 경우 많은 클라이언트의 접속을 받을 수 있기 때문에 네트워크 카드(인터페이스)가 여럿 존재하고 있으며, 그에 따라 IP주소도 여러 개가 된다. 그러므로 자신에게 접속 가능한 여러 IP를 아무거나 받기 위해 이렇게 선언한다.
    • 참고 :
      127로 시작하는 IP주소의 대표적인 예 - 127.0.0.1 (루프백 주소)
      -> 어떤 호스트든지 자기 자신을 가리키는 IP주소

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=no1rogue&logNo=30096947717

profile
기록하자

0개의 댓글