기능 요약 (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( )
'개발자의 기록 노트 > C' 카테고리의 다른 글
pow( ) - 거듭제곱 함수 구현하기(정수 기반) (0) | 2017.12.21 |
---|---|
[네트워크/C reference] Special IPv6 주소 검사 매크로 (0) | 2017.12.14 |
[네트워크/C reference] inet_pton 함수 (0) | 2017.11.12 |
[C][CURL] CURLOPT_FOLLOWLOCATION 의 버전별 동작 차이 (0) | 2017.08.31 |
[네트워크/C] addrinfo 구조체 (0) | 2017.06.16 |
[네트워크/C] getaddrinfo 함수 (0) | 2017.06.16 |