제임스딘딘의
Tech & Life

개발자의 기록 노트/C

[네트워크/C reference] inet_ntop 함수

제임스-딘딘 2017. 11. 2. 02:16

기능 요약 (Summary)

inet_ntop - IPv4 와 IPv6 주소를 binary 형태에서 사람이 알아보기 쉬운 텍스트(human-readable text)형태로 전환해준다.



헤더 (Header files)

  #include <arpa/inet.h>


API 원형 (API Prototype)

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);



설명 (Description)

이 함수는 네트워크 주소 구조체인 src를 캐릭터 문자열 dst로 변환해주는 함수이다. 네트워크 주소는 IPv4 혹은 IPv6 가 될 수 있으며, 'address family'를 의미하는 af 를 참고하여 src를 해석하게 된다. 결과가 저장되는 dst는 반드시 NULL 포인터가 아니어야 한다. 즉, 메모리 공간이 할당된 포인터 이어야 한다는 뜻.


이 API를 호출하는 쪽에서는 dst 버퍼의 크기를 size 를 통해 지정한다.


inet_ntop( )는 다양한 address family를 지원하기 위해 inet_ntoa( ) 함수를 확장한다.

그래서 inet_ntoa( )는 현재 deprecated 되도록 고려되고 있다.


af 는 현재 아래의 address family들을 사용 할 수 있도록 지원된다.


AF_INET

src 는 struct in_addr (network byte order임) 구조체를 가리킨다. 

이것은 IPv4 네트워크 주소로 변환 될 것이고, 'dotted-decimal format' 이라고 불리는 형태의 주소, 즉, "ddd.ddd.ddd.ddd" 과 같은 형태가 될 것이다.

버퍼 dst 는 반드시 메모리가 할당되어야 하며, 그 크기는 최소한 INET_ADDRSTRLEN 크기만큼의 바이트 수는 되어야 한다.


AF_INET6

src 는 struct in6_addr (network byte order임) 구조체를 가리킨다.

이것은 IPv6 네트워크 주소로 변환될 것이다. 변환된 문자열의 형태는 해당 IPv6 주소를 나타내기에 가장 적절한 형태가 될 것이다. 

즉, 생략가능한 부분은 연속으로 콜론 2개를 찍은 형태의 단축형 결과를 얻게 된다는 것이다. 

버퍼 dst 는 반드시 메모리가 할당되어야 하며, 그 크기는 최소한 INET6_ADDRSTRLEN 크기만큼의 바이트 수는 되어야 한다.



반환값 (Return value)

성공하면, inet_ntop( ) 는 dst 를 가리키는 포인터를 반환한다.

만약 에러가 있었다면, NULL이 반환되고, errno 에 에러와 관련된 값이 설정된다.




오류 값 (Errors)

EAFNOSUPPORT

af 가 유효한 address family가 아님.


ENOSPC 

변환된 주소 문자열이 size에 의해 주어진 크기를 초과하게 됨.



준수사항

POSIX.1-2001, POSIX.1-2008.  

RFC 2553 에서는 이 함수 원형의 마지막 인자인 size를 size_t로 정의하고 있음을 알아둘 것.

많은 시스템이 RFC2553를 따른다. Glibc 2.0와 2.1 버전은 size_t 이지만, 2.2 및 이후 버전은 socklen_t 이다.



같이 볼 함수들

getnameinfo( )

getaddrinfo( )

inet_pton( )