RESOLVER(3)

명칭
res_query, res_search, res_mkquery, res_send, res_init, dn_comp, dn_expand - resolver routine

프로그램 라이브러리
libc

서식
<sys/types.h> <netinet/in.h> <arpa/nameser.h> <resolv.h> int res_query(const char *dname, int class, int type, u_char *answer, int anslen) int res_search(const char *dname, int class, int type, u_char *answer, int anslen) int res_mkquery(int op, const char *dname, int class, int type, const u_char *data, int datalen, const u_char *newrr_in, u_char *buf, int buflen) int res_send(const u_char *msg, int msglen, u_char *answer, int anslen) int res_init() dn_comp(const char *exp_dn, u_char *comp_dn, int length, u_char **dnptrs, u_char **lastdnptr) int dn_expand(const u_char *msg, const u_char *eomorig, const u_char *comp_dn, char *exp_dn, int length)

해설
이러한 routine는, 인터넷 도메인 네임서버를 사용해, 문의와 응답 메세지의 작성, 송신, 해석을 실시합니다.

resolver routine가 사용하는 글로벌인 설정과 상태의 정보는, 구조체 _res 에 보존됩니다. 대부분의 값은, 적절한 기본값이 되어 있으므로 무시할 수 있습니다. _res.options 에 보존되는 옵션은, resolv.h 그리고 이하와 같이 정의되고 있습니다. 옵션은, 유효한 옵션의 비트 논리합을 취한, 단순한 비트 마스크로서 보존되고 있습니다.

RES_INIT
    초기 네임서버 주소와 디폴트 도메인명이 초기화되고 있는 경우는 진입니다 ( res_init() 하지만 불려 갔을 경우 등).

RES_DEBUG
    디버그 메세지를 출력합니다.

RES_AAONLY
    신뢰할 수 있는 응답만을 받아들입니다. 이 옵션을 사용했을 경우, 신뢰할 수 있는 응답이나 에러가 발견될 때까지 res_send() (을)를 계속할 필요가 있습니다. 현재로서는, 이것은 실장되고 있지 않습니다.

RES_USEVC
    UDP 데이터 그램 대신에 TCP 접속을 문의해에 사용합니다.

RES_STAYOPEN
    RES_USEVC (와)과 함께 사용해, 문의와 문의의 사이도 TCP 접속을 연 채로에 유지합니다. 많은 문의를 정기적으로 실시하는 프로그램만으로 편리합니다. 통상의 사용에는 UDP (을)를 사용해야 합니다.

RES_IGNTC
    현재는 사용되지 않습니다 (트란케이션에라를 무시합니다, 즉, TCP 그리고 재시행하지 않습니다).

RES_RECURSE
    문의의 반복 요구 비트를 설정합니다. 이것이 디폴트입니다 ( res_send() (은)는 반복 문의를 행하지 않고, 네임서버가 반복을 처리하는 것을 기대합니다).

RES_DEFNAMES
    설정하면(자), res_search() 하지만 싱글 컴퍼넌트명 (닷을 포함하지 않는 이름)에 디폴트의 도메인명을 추가하게 됩니다. 이 옵션은 디폴트로 유효하게 되어 있습니다.

RES_DNSRCH
    이 옵션을 설정하면(자), res_search() 하지만, 현재의 도메인과 친도메인으로 호스트명을 검색하게 됩니다. hostname(7) (을)를 참조해 주세요. 이것은, 표준 호스트 검색 routine gethostbyname(3) 에 의해 사용됩니다. 이 옵션은 디폴트로 유효하게 되어 있습니다.

NOALIASES
    이 옵션은, “HOSTALIASES” 환경 변수에 의해 제어되는 유저 레벨의 앨리어싱(aliasing) 기능을 무효로 합니다. 네트워크 demon에서는, 이 옵션을 설정할 필요가 있습니다.

RES_USE_INET6
    IPv6 만의 어플리케이션의 서포트를 유효하게 합니다. IPv4 주소는 IPv4 투영 주소로서 돌려주어지게 됩니다. 예를 들어, 10.1. 1.1 하 ::ffff:10. 1.1. 1 (와)과 같이 돌려주어집니다. 이 옵션은, 특정의 커널 configuration의 경우에만 의미가 있습니다.

RES_USE_EDNS0
    EDNS0 확장의 OPT pseudo-RR 의 서포트를 유효하게 합니다. 이 옵션에 의해, resolver 코드는 DNS 문의에 OPT pseudo-RR 를 더해, 이쪽의 수취 버퍼의 크기를 통지합니다. 이 옵션에 의해, DNS 서버는 디폴트가 아닌 크기의 수취 버퍼를 이용할 수 있으므로, 보다 큰 응답을 보낼 수가 있게 됩니다. EDNS0 확장된 DNS 문의 패킷은 비 EDNS0 DNS 서버란 호환성이 없습니다.

res_init() routine는, 설정 파일을 읽어들여 (설정 파일이 존재하는 경우. resolver(5) 참조), 디폴트 도메인명, 검색 리스트, 로컬 네임서버의 인터넷 주소를 입수합니다. 서버가 설정되어 있지 않은 경우는, resolver를 실행하고 있는 호스트가 시험 받습니다. 현재의 도메인명은, 설정 파일로 지정되어 있지 않은 경우, 호스트명으로 정의됩니다만, 환경 변수 LOCALDOMAIN 그리고 덧쓰기할 수도 있습니다. 검색 리스트를 프로세스 마다 덧쓰기하는 경우는, 공백에서 단락지어진 복수의 토큰을 이 환경 변수에 포함합니다. 이것은, 설정 파일의 search 명령을 닮아 있습니다. 다른 환경 변수 “RES_OPTIONS” (을)를 설정하면, 특정의 내부 resolver 옵션을 덧쓰기할 수 있습니다. 내부 resolver 옵션은, 덧쓰기되지 않으면, _res 구조체의 필드를 변경하는 것으로 설정되는지, 설정 파일의 options 명령로부터 계승됩니다. “RES_OPTIONS” 환경 변수의 문장구조법에 대해서는, resolver(5) (을)를 참조해 주세요. 통상의 경우, 초기화는 이하의 routine를 처음으로 호출했을 때에 실행됩니다.

res_query() 함수는, 서버 문의 메카니즘의 인터페이스를 제공하는 것으로, 문의의 작성, 작성된 문의의 로컬 서버에의 송신, 응답의 대기, 응답의 예비 체크를 실시합니다. 문의는, 완전한 형태에서의 도메인명 dname 에 대한, 지정되었다 type (와)과 class 의 정보를 요구합니다. 응답 메세지는 answer 버퍼에 남겨져 호출측이 지정한다 anslen 의 길이가 되어 있습니다.

res_search() routine는, res_query() (와)과 같이 문의의 작성과 응답의 대기를 실시합니다만, 거기에 더해 RES_DEFNAMES (와)과 RES_DNSRCH 옵션에 의해 제어되는 디폴트와 검색 규칙도 실장하고 있습니다. 이 routine는 최초로 성공한 응답을 돌려줍니다.

나머지의 routine는, res_query() 하지만 사용하는 저레벨 routine입니다. res_mkquery() 함수는, 표준 문의 메세지를 작성해 buf 에 배치해, 문의의 사이즈를 돌려줍니다. 문의가 buflen 보다 긴 경우는 -1 을 돌려줍니다. 문의 타입 op (은)는, 통상의 경우 QUERY 그렇지만, <arpa/nameser.h> 그리고 정의되고 있는 어느 문의 타입에도 할 수 있습니다. 문의의 도메인명은 dname 그리고 지정합니다. newrr (은)는 현재 사용되고 있지 않습니다만, 갱신 메세지를 작성하기 위한의 것입니다.

res_send() routine는, 사전 포맷 끝나 문의를 송신해, 응답을 돌려줍니다. RES_INIT 하지만 설정되어 있지 않은 경우는 res_init() (을)를 호출합니다. 로컬 네임서버에의 문의의 송신, 및 타임 아웃과 재시행의 처리도 실시합니다. 응답 메세지의 길이를 돌려줍니다만, 에러가 있었을 경우는 -1 을 돌려줍니다.

dn_comp() 함수는, 도메인명 exp_dn (을)를 압축해, comp_dn 에 보존합니다. 압축된 이름의 사이즈를 돌려줍니다만, 에러가 있었을 경우는 -1 을 돌려줍니다. comp_dn 하지만 가리키는 배열의 사이즈는 length 그리고 지정합니다. 압축때, 현재의 메세지로 그때까지 압축된 이름을 가리키는 포인터 dnptrs 의 배열을 사용합니다. 최초의 포인터는 메세지의 최초를 가리켜, 리스트는 NULL 그리고 끝납니다. 배열의 제한은 lastdnptr 그리고 지정합니다. dn_comp() 의 부작용은, 이름이 압축되었을 때에 메세지에 삽입되는 label의 포인터의 리스트가 갱신되는 것입니다. dnptr 하지만 NULL 인 경우, 이름은 압축되지 않습니다. lastdnptr 하지만 NULL 인 경우, label의 리스트는 갱신되지 않습니다.

dn_expand() 엔트리는, 압축된 도메인명 comp_dn (을)를 완전한 도메인명에 전개합니다. 압축된 이름은, 문의하고 혹은 응답 메세지에 포함됩니다. msg (은)는, 메세지의 최초를 가리키는 포인터입니다. 전개된 이름은, exp_dn 하지만 가리키는 사이즈 length 의 버퍼에 배치됩니다. 압축된 이름의 사이즈가 돌려주어집니다만, 에러가 있었을 경우는 -1 이 돌려주어집니다.

관련 파일

/etc/resolv.conf
    설정 파일. resolver(5) (을)를 참조.

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

Name Server Operations Guide for BIND.

역사
res_query() 함수는 4.3BSD 그리고 등장했습니다.