#include <netdb.h> extern int h_errno; struct hostent *gethostbyname(const char *name); #include <sys/socket.h> /* for AF_INET */ struct hostent *gethostbyaddr(const char *addr, int len, int type); void sethostent(int stayopen); void endhostent(void); void herror(const char *s); const char * hstrerror(int err);
gethostbyaddr() 함수는 길이 len 그리고 주소 타입 type인 호스트 주소 addr에 해당하는 hostent 구조체를 리턴한다. 유일하게 유효한 주소 타입은 현재 AF_INET이다.
만일 stayopen가 참(1)이라면, sethostent() 함수는 연결된 TCP 소켓이 네임 서버 질의를 위해 사용되어야 한다는것을 가리킨다. 그리고 연결은 연속적은 질의를 동안 계속 열려 있어야 한다. 그렇지 않으면, 네임 서버 질의를 UDP 데이터그램을 사용할 것이다.
endhostent() 함수는 네임 서버 질의를 위한 TCP 연결의 사용을 끝낸다.
(구식) herror() 함수는 stderr에 현재 값의 h_errno 에 상응하는 에러 메세지를 출력한다.
(구식) hstrerror() 함수는 에러(전형적으로 h_errno) 넘버를 가지며 상응하는 메세지를 반환한다.
도메인 네임 질의는 gethostbyname() 에 의해 수행되며 gethostbyaddr()는 /etc/host.conf에 있는 order라인의 내용에 의존하여 /etc/hosts에서 라인을 뽑아내 네임 서버 named(8)의 일부나 모두의 조합과 네트웍 정보 서비스 (NIS 또는 YP)를 사용한다. ( resolv+(8)를 참조해라.) 기본 행동은 /etc/hosts 다음에 named(8)에 질의하는 것이다.
hostent 구조체는 다음과 같이 <netdb.h>에 정의되어 있다:
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] /* 구 버전과의 호환을 위해 */
hostent 구조체의 멤버는:
Glibc2는 또한 gethostbyname()처럼 작동하는
struct hostent *gethostbyname2(const char *name, int af);
를 가지고 있다. 그러나 그것은 주소가 속해 있는 주소 가족을 지정하도록 한다.
Austin 초안은 gethostbyaddr() 과 gethostbyname() 를 상속하는 함수를 만들었으며 다음과 같이 소개하였다.
struct hostent *getipnodebyaddr (const void *restrict addr, socklen_t len, int type, int *restrict error_num); struct hostent *getipnodebyname (const char *name, int type, int flags, int *error_num);