GETHOSTBYNAME(3)

명칭
gethostbyname, gethostbyname2, gethostbyaddr, gethostent, sethostent, endhostent, herror, hstrerror - 네트워크 호스트의 엔트리의 취득

프로그램 라이브러리
libc

서식
<netdb.h> extern int h_errno; struct hostent * gethostbyname(const char *name) struct hostent * gethostbyname2(const char *name, int af) struct hostent * gethostbyaddr(const char *addr, int len, int type) struct hostent * gethostent(void) void sethostent(int stayopen) void endhostent(void) void herror(const char *string) const char * hstrerror(int err)

해설
gethostbyname(), gethostbyname2(), gethostbyaddr() 함수는 각각, 다음에 나타내는 구조를 가지는 오브젝트에의 포인터를 돌려줍니다. 구조체에는, 이름 또는 주소에 의해 참조되는 인터넷 호스트가 기술되고 있어, 네임서버 named(8) (으)로부터, 또는 /etc/hosts 에 있는 행의 내역 필드로부터 얻을 수 있던 정보를 포함하고 있습니다. 로컬의 네임서버가 실행되어 있지 않은 경우, 이러한 routine는 /etc/hosts (을)를 검색합니다.

    struct  hostent {
            char    *h_name;        /* 호스트의 정식명 */
            char    **h_aliases;    /* 별명 리스트 */
            int     h_addrtype;     /* 호스트 주소 타입 */
            int     h_length;       /* 주소의 길이 */
            char    **h_addr_list;  /* 네임서버로부터의 주소 리스트 */
    };
    #define h_addr  h_addr_list[0]  /* 주소, 후방 호환용 */

이 구조체의 멤버는 다음과 같습니다.

h_name
    호스트의 정식명.

h_aliases
    호스트의 별명 (앨리어스(alias))의 눌로 끝나는 배열.

h_addrtype
    돌려주어지는 주소의 타입이며, 통상은 AF_INET

h_length
    주소의 바이트수에 의한 길이.

h_addr_list
    호스트의 네트워크 주소의 눌로 끝나는 배열. 호스트 주소는 네트워크 바이트 오더로 돌려주어집니다.

h_addr
    h_addr_list 에 있는 최초의 주소이며, 후방 호환용.

네임서버를 사용하는 경우, 이름이 닷으로 끝나지 않을 때는 gethostbyname() 및 gethostbyname2() (은)는 이름이 붙은 호스트를, 현재의 도메인과 부모의 도메인으로부터 검색합니다. 이름에 닷이 포함되지 않고, 한편 환경 변수 “HOSTALIASES” 에 앨리어스(alias) 파일의 이름이 포함되어 있는 경우는, 입력명에 적합하는 앨리어스(alias)가, 우선 앨리어스(alias) 파일로부터 검색됩니다. 도메인 검색의 수속과 앨리어스(alias) 파일의 서식에 대해서는, hostname(7) (을)를 참조해 주세요.

gethostbyname2() 함수는 gethostbyname() 의 발전형으로, AF_INET 이외의 주소 패밀리, 예를 들어 AF_INET6 에서의 검색을 가능하게하기 위한의 것입니다. 다만 현재는, af 인수에 AF_INET (을)를 지정할 필요가 있습니다. 다른 값을 지정하면(자) gethostbyname2() 함수는, h_errno (을)를 NETDB_INTERNAL (으)로 설정한 다음에, NULL (을)를 돌려줍니다.

sethostent() 함수는, 문의하고 시에 접속되었다 TCP 소켓을 사용하고 싶은 경우에 사용할 수 있습니다. stayopen 플래그가 0 이 아니면, TCP 에 의해 모든 문의를 네임서버에 보내, gethostbyname(), gethostbyname2(), gethostbyaddr() 의 각각 호출해 후에도, 접속을 보관 유지하도록(듯이) 옵션을 설정합니다. 플래그가 0 때, 문의는 UDP 데이터 그램을 사용해 실행됩니다.

endhostent() 함수는 TCP 접속을 클로우즈 합니다.

herror() 함수는 진단 출력에 메세지를 써냅니다. 진단 출력은 캐릭터 라인 파라미터 s 라고 정수 캐릭터 라인 ": " 라고 h_errno 의 값에 대응하는 메세지로 구성됩니다.

hstrerror() 함수는, err 파라미터의 값에 대응하는 메세지 텍스트의 캐릭터 라인을 돌려줍니다.

관련 파일
/etc/hosts
/etc/host.conf
/etc/resolv.conf

진단
gethostbyname(), gethostbyname2(), gethostbyaddr() 의 에러 상태는, NULL 포인터가 돌아가는 것으로 나타납니다. 그 경우는 외부 정수 h_errno (을)를 체크하는 것으로써, 일시적인 에러인지, 무효 또는 미지의 호스트명을 지정했기 때문에인지를 판단할 수 있습니다. herror() routine에 의해, 에러를 기술하는 에러 메세지를 표시할 수 있습니다. 인수 string 하 NULL (이)가 아니면 표시되어 후에 코론과 스페이스가 계속됩니다. 에러 메세지가 종단의 개행과 함께 인쇄됩니다.

변수 h_errno (은)는 다음의 값을 취할 수 있습니다.

HOST_NOT_FOUND
    지정한 이름의 호스트가 미지입니다.

TRY_AGAIN
    이것은 통상은 일시적인 에러로, 로컬 서버가 공식 서버 (으)로부터 응답을 얻을 수 없었던 것을 의미합니다. 잠시 후 재차 시도하면(자) 성공한다 경우가 있습니다.

NO_RECOVERY
    하등의 예기치 않은 서버 에러가 발생했습니다. 이것은 회복 불능인 에러입니다.

NO_DATA
    요구된 이름은 유효합니다만, IP 주소가 없습니다. 이것은 일시적인 에러가 아닙니다. 지정한 호스트명이 네임서버에는 알려져 있는 것에도 불구하고, 대응하는 주소가 없다고 하는 의미입니다. 이 네임서버에 대해서 같은 도메인명으로 별도인 타입의 요구를 실시하면, 회답을 얻을 수 있을지도 모릅니다. 예를 들어 메이르포워다가 그 도메인에 등록되어 있는 경우가 있습니다.

관련 항목
getaddrinfo(3), resolver(3), hosts(5), hostname(7), named(8)

경고
네임서버는 검색하지 않고 /etc/hosts 만을 검색하는 routine를 사용하도록(듯이) libc(3) 하지만 구축되었을 경우, gethostent() 함수가 정의되어 sethostent() 및 endhostent() 하지만 재정의됩니다.

gethostent() 함수는, /etc/hosts 파일의 다음의 행을 읽어들입니다. 이 때, 필요하면 파일을 오픈합니다.

sethostent() 함수는 파일 /etc/hosts (을)를 오픈 혹은 되감기 합니다. stayopen 인수가 0 이 아니면, gethostbyname(), gethostbyname2(), gethostbyaddr() 의 각각의 호출의 뒤, 파일은 클로우즈 되지 않습니다.

endhostent() 함수는 파일을 클로우즈 합니다.

역사
herror() 함수는 4.3BSD 그리고 등장했습니다. endhostent(), gethostbyaddr(), gethostbyname(), gethostent(), sethostent() 함수는 4.2BSD 그리고 등장했습니다. gethostbyname2() 함수는 BIND 버젼 4.9. 4 로 처음 등장했습니다.

버그
이러한 함수는 정적 데이터 기억역을 사용합니다. 다음에 이 데이터를 사용할 필요가 있는 경우는, 이후의 이러한 함수 호출로 데이터가 덧쓰기되기 전에, 카피해 보존할 필요가 있습니다. 덧붙여 주소 데이터로서 받아들이는 것은 현재, 인터넷 주소 포맷 뿐입니다.