INET(3)

명칭
inet_aton, inet_addr, inet_network, inet_ntoa, inet_ntop, inet_pton, inet_makeaddr, inet_lnaof, inet_netof - 인터넷 주소 조작 함수

프로그램 라이브러리
libc

서식
<sys/types.h> <sys/socket.h> <netinet/in.h> <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *pin) unsigned long inet_addr(const char *cp) unsigned long inet_network(const char *cp) char * inet_ntoa(struct in_addr in) const char * inet_ntop(int af, const void *src, char *dst, size_t size) int inet_pton(int af, const char *src, void *dst) struct in_addr inet_makeaddr(unsigned long net, unsigned long lna) unsigned long inet_lnaof(struct in_addr in) unsigned long inet_netof(struct in_addr in)

해설
inet_aton(), inet_addr() 및 inet_network() routine는, 인터넷 표준의 ‘.’ 표기법으로 나타나는 수치를 표현하고 있는 캐릭터 라인을 해석합니다.

inet_pton() 함수는, 표시 형식의 주소 (즉 캐릭터 라인으로 보관 유지되고 있는 인자 가능한 형식)로부터 네트워크 형식 (통상 struct in_addr 혹은 다른 내부적인 바이너리 표현 형식에서, 네트워크 바이트 오더)에의 변환을 실시합니다. 이 함수는, 지정된 주소 패밀리에 있어, 주소가 유효한 것이면 1 을 돌려주어, 퍼스 할 수 없으면 0 을 돌려줍니다. 또 시스템 우류가 발생했을 때 (이 경우는 errno 하지만 설정됩니다)에는,-1 을 돌려줍니다. 이 함수는 현재 AF_INET (와)과 AF_INET6 에 대해서 유효합니다.

inet_aton() routine는, 지정된 캐릭터 라인을 인터넷 주소로서 해석해, 주어진 구조체안에 주소를 설정합니다. 캐릭터 라인이 정상적으로 해석되면(자) 동routine는 1 을 돌려주어, 캐릭터 라인이 무효 때 0 을 돌려줍니다. inet_addr() (와)과 inet_network() 함수는 각각, 인터넷 주소와 인터넷 네트워크 번호로서 사용하는데 적합한 수치를 돌려줍니다.

inet_ntop() 함수는, 네트워크 형식 (통상 struct in_addr 혹은 다른 내부적인 바이너리 형식에서, 네트워크 바이트 오더)로부터 표시 형식 (외부에 표시하는데 적합한 형식)에의 변환을 실시합니다. 이 함수는, 시스템 우류가 발생했을 때 (이 경우는 errno 하지만 설정됩니다)에는 눌을 돌려주어, 그 이외때는 목적의 캐릭터 라인에의 포인터를 돌려줍니다. 이 함수는 현재 AF_INET (와)과 AF_INET6 에 대해서 유효합니다.

inet_ntoa() routine는, 인터넷 주소를 받아 ‘.’ 표기법의 주소를 나타낸다 ASCII 캐릭터 라인을 돌려줍니다. inet_makeaddr() routine는 인터넷 네트워크 번호와 로컬 네트워크 주소를 받아, 그것을 기본으로 해 인터넷 주소를 생성합니다. inet_netof() (와)과 inet_lnaof() routine는 인터넷 호스트 주소를 분할해, 각각 네트워크 번호와 로컬 네트워크 주소부로서 돌려줍니다.

모든 인터넷 주소는 네트워크 오더 (왼쪽에서 오른쪽에의 바이트순서)로 돌려주어집니다. 네트워크 번호와 로컬 주소부는 모두 머신 형식의 정수치로 돌려주어집니다.

인터넷 주소
‘.’ 표기법으로 지정되는 값은 다음의 어떤 것인가 하나의 형식을 취합니다.

    a.b.c.d
    a.b.c
    a.b
    a

4 개의 부분 주소가 지정되면(자), 각 부분은 1 바이트의 데이터라고 해석되어, 왼쪽에서 오른쪽의 순서로 인터넷 주소의 4 바이트에 할당할 수 있습니다. 인터넷 주소가 VAX 위에서 32 비트의 정수치이다고 보여질 때, 상기에 해당하는 바이트는, “d.c.b.a” (이)라고 표시되는 것에 주의해 주세요. 즉, VAX 의 바이트 오더는 오른쪽에서 왼쪽의 순서가 됩니다.

3 개의 부분 주소가 지정되면(자), 마지막 부분이 16 비트치라고 해석되어, 네트워크 주소의 우단의 2 바이트가 됩니다. 이것에 의해 3 개의 부분 주소 형식에서 Class B 네트워크 주소를 “128.net.host” (와)과 지정할 수 있어 편리합니다.

2 개의 부분 주소가 주어지면(자), 마지막 부분 주소가 24 비트치로서 해석되어, 네트워크 주소의 우단의 3 바이트가 됩니다. 이것에 의해 2 개의 부분 주소 형식에서 Class A 네트워크 주소를 “net.host” (와)과 지정할 수 있어 편리합니다.

1 개의 부분 주소만 지정되면(자), 값은 바이트의 재조정없이 직접 네트워크 주소에 보존됩니다.

‘.’ 표기법으로 “부분” (으)로서 공급되는 수치는 모두, C 언어로 지정되는 10 진수, 8 진수, 16 진수의 몇개의 형식을 취할 수가 있습니다 (즉, 선행의 0x 또는 0X 는 16 진수를 의미해, 선행하는 0 은 8 진수를 의미해, 수치는 10 진수라고 해석됩니다) .

inet_aton() (와)과 inet_ntoa() 함수는 약간 피해야 할 함수로, 오히려 addr2ascii(3) 패밀리가 사용됩니다. 그러나, 이러한 함수는 아직 넓게 실장되어 있지 않기 때문에, 당면, 이식성이 있는 프로그램은 이러한 함수에 의존하지 못하고, inet(3) 함수가 계속 사용되겠지요.

진단
inet_addr() (와)과 inet_network() (은)는 형식 위반의 요구에 대해 INADDR_NONE 정수를 돌려줍니다.

관련 항목
addr2ascii(3), gethostbyname(3), getnetent(3), hosts(5), networks(5) RFC, 2373, July 1998, IP Version 6 Addressing Architecture.

표준
inet_ntop() (와)과 inet_pton() 함수는, xns5. 2 에 적합하고 있습니다. inet_pton() 함수는, 1 개, 2 개 혹은 3 개의 닷 형식의 주소에는 대응하고 있지 않는 것에 주의해 주세요. 주소는 4 개로 나누어, 10 진수로 지정하지 않으면 안됩니다. 이것은 inet_aton() 함수가 받을 수 있는 입력 세트보다 좁은 것입니다.

역사
이러한 함수는 4.2BSD 그리고 등장했습니다.

버그
INADDR_NONE (0xffffffff) 값은 유효한 브로드캐스트 어드레스입니다만, inet_addr() (은)는 이 값을 돌려줄 때에 실패를 나타내 버립니다. 새롭다 inet_aton() 함수에서는, 이 문제는 해결되고 있습니다. 호스트 바이트 오더대 네트워크 아르바이트 오더의 문제는 혼란하기 쉽상입니다. inet_ntoa() 하지만 돌려주는 캐릭터 라인은 정적 메모리 area에 거둘 수 있습니다.

inet_addr 는 struct in_addr (을)를 돌려줄 필요가 있습니다.