Manpages

이 름

gethostbyname, gethostbyaddr, sethostent, endhostent, herror, hstrerror − 네 트 웍 호 스 트 엔 트 리 를 가 져 온 다 .

사 용 법

#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);

설 명

gethostbyname() 함 수 는 주 어 진 호 스 트 name 에 상 응 하 는 hostent 타 입 의 구 조 체 를 반 환 한 다 . 여 기 서 name은 호 스 트 이 름 이 거 나 표 준 점 표 기 법 의 IPv4 주 소 이 거 나 , 콜 론 (그 리 고 점 표 기 법 도 가 능 )표 기 법 의 IPv6이 다 . (IPv6에 대 한 기 술 을 위 해 RFC1884를 참 조 해 라 .) 만 일 name 이 IPv4나 IPv6 주 소 라 면 , 어 떤 룩 업 도 행 해 지 지 않 고 gethostbyname()는 단 순 히 nameh_name 필 드 에 복 사 하 고 해 당 struct in_addr 를 반 환 하 는 hostent 구 조 체 의 h_addr_list[0] 필 드 에 복 사 한 다 . 만 일 name가 점 으 로 끝 나 지 않 고 환 경 변 수 HOSTALIASES가 설 정 되 어 있 다 면 , HOSTALIASES가 가 리 키 는 얼 라 이 싱 파 일 이 name을 위 해 우 선 탐 색 된 다 . (파 일 형 식 을 위 해 hostname(7)을 참 조 해 라 .) 현 재 도 메 인 과 상 위 도 메 인 은 name이 점 으 로 끝 나 지 않 는 다 면 탐 색 된 다 .

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 구 조 체 의 멤 버 는 :

h_name

호 스 트 의 공 식 적 인 이 름

h_aliases

호 스 트 를 위 해 널 로 끝 나 는 선 택 적 인 이 름 의 배 열

h_addrtype

주 소 타 입 ; 현 재 는 항 상 AF_INET 이 다 .

h_length

바 이 트 로 주 소 의 길 이 .

h_addr_list

네 트 웍 바 이 트 순 서 로 호 스 트 를 위 한 널 로 종 료 된 네 트 웍 주 소 배 열

h_addr

예 전 과 의 호 환 을 위 해 h_addr_list의 처 음 주 소

반 환 값

gethostbyname() 그 리 고 gethostbyaddr() 함 수 는 hostent 구 조 체 를 반 환 하 거 나 만 일 에 러 가 발 생 한 다 면 NULL 포 인 터 를 반 환 한 다 . 에 러 시 , h_errno 변 수 는 에 러 넘 버 를 가 진 다 .

에 러

변 수 h_errno는 다 음 값 들 을 가 진 다 :
HOST_NOT_FOUND

지 정 된 호 스 트 가 알 려 지 지 않 았 다 .

NO_ADDRESSNO_DATA

요 구 한 이 름 이 유 효 하 지 만 IP 주 소 를 가 지 지 않 는 다 .

NO_RECOVERY

복 구 될 수 없 는 네 임 서 버 에 러 가 발 생 했 다 .

TRY_AGAIN

임 시 적 에 러 로 네 임 서 버 인 증 시 발 생 했 다 . 다 시 시 도 해 라 .

파 일

/etc/host.conf

해 석 설 정 파 일 .

/etc/hosts

호 스 트 데 이 터 베 이 스 파 일

호 환

BSD 4.3.

주 의

SUS-v2 표 준 은 버 그 이 며 , len 인 자 를 size_t 타 입 으 로 선 언 하 였 다 .(이 것 은 잘 못 된 것 이 다 . 왜 냐 하 면 그 것 은 int 이 지 size_t 가 아 니 기 때 문 이 다 . Austin 초 안 은 socklen_t으 로 했 으 며 이 것 은 가 능 하 다 .)

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);

관 련 항 목

resolver(3), hosts(5), hostname(7), resolv+(8), named(8)

역 자

정 강 훈 <skyeyes [AT] soback.net>, 2001년 4월 30일