이 름
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()는 단 순 히 name 을 h_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_ADDRESS 나 NO_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일