문자열 정보 -> 네트워크 바이트 순서의 정수
이제 네트워크 바이트 순서에 대해서도 알았으니, bind 함수를 비롯해서 앞에 설명했던 구조체를 활용해보자.
-
sockaddr_in 구조체 안에서 주소 정보를 저장하기 위해 선언된 멤버 변수는 32비트는 정수형으로 정의되어 있다.
따라서 우리는 IP주소 정보의 할당을 위해서 32비트 정수 형태로 IP주소를 표현할 수 있어야 한다.
그러나 문자열 정보에 익숙한 우리들에게 매우 불편하지 않을 수 없는 일이다.
IP주소 "127.0.0.1"와 같이 점이 찍힌 십진수 표현방식(Dotted-Decimal Notation)에는 익숙하지만,
하나의 정수로 표현하는 데에는 익숙하지 않다.
그런데 다행히도 문자열로 표현된 IP주소를 32비트 정수형으로 변환해주는 함수가 있다.
게다가, 이 함수는 변환과정에서 자동으로 네트워크 바이트 순서로의 변환도 동시에 진행해준다.
아래 사진을 봐보자.
-

-
위 사진의 함수는 문자열 정보를 네트워크 바이트 순서의 정수로 변환해주는 함수이다.
위 함수의 인자로 127.0.0.1와 같이 점이 찍힌 10진수로 표현된 문자열을 전달하면,
해당 문자열 정보를 참조해서 IP주소 정보를 32bit 정수형으로 반환한다.
물론 이 때 반환되는 정수는 네트워크 바이트 순서로 정렬되어 있다.
그리고 위 함수 선언의 반환형인 in_addr_t는 현재 32bit 정수형으로 정의되어 있다.
아래의 예제를 봐보자
-

-
위 사진의 예제는 inet_addr 함수의 활용한 예시이다.
핵심 의미를 봐보면
-
7번째 줄 : IP주소는 .(dot) 기호를 기준으로 4등분 되어있다.
각각 1byte씩 용량을 차지하여 총 4byte가 IP주소의 크기인데
1byte당 표현할 수 있는 최대 크기의 정수는 255까지로 1.2.3.256은 분명 잘못된 IP주소이다.
이 잘못된 주소를 이용해서 inet_addr 함수의 오류 검출능력을 15번째 줄에서 확인한다.
-
9, 15번째 줄 : 실행결과를 통해서 9행의 함수 호출은 정상적인 결과로 이어지지만
15번째 줄의 함수 호출은 정상적인 결과로 이어지지 않는다.
-
실행결과

-
위 사진의 실행결과에서 보이듯이
inet_addr 함수는 32bit 정수형태로 IP주소를 변환할 뿐만 아니라
유효하지 못한 IP주소에 대한 오류 검출 능력도 가지고 있다.
그리고 출력결과를 통해서 네트워크 바이트 순서로 정렬된 것도 알 수 있다.
그리고 다음 포스팅에서 소개하는 inet_aton 함수도 기능상으로는 inet_addr 함수와 동일하다.
즉, 문자열 형태의 IP주소를 32bit 정수, 그리고 네트워크 바이트 순서로 정렬해서 반환한다.
다만 구조체 변수 in_addr를 이용하는 형태라는 점에서 차이가 있다.
참고로 활용도는 inet_aton 함수가 더 높다.
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스) 문자열 정보를 네트워크 바이트 순서의 정수로(3) (0) | 2021.02.02 |
---|---|
(리눅스) 문자열 정보를 네트워크 바이트 순서의 정수로(2) (0) | 2021.02.02 |
(리눅스) 바이트 순서(Order)와 네트워크 바이트 순서(2-1) (0) | 2021.02.02 |
(리눅스) 바이트 순서(Order)와 네트워크 바이트 순서(2) (0) | 2021.02.02 |
바이트 순서(Order)와 네트워크 바이트 순서 (0) | 2021.02.02 |