PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

include/resolv.h

http://www.minix3.org/
C Header | 509 lines | 365 code | 34 blank | 110 comment | 2 complexity | 656f29c8e0e716554bbdb4986ffb2cd0 MD5 | raw file
Possible License(s): MIT, WTFPL, AGPL-1.0, BSD-3-Clause, GPL-3.0, LGPL-2.0, JSON, 0BSD
  1. /* $NetBSD: resolv.h,v 1.38 2009/10/24 17:23:34 christos Exp $ */
  2. /*
  3. * Portions Copyright (C) 2004, 2005, 2008, 2009 Internet Systems Consortium, Inc. ("ISC")
  4. * Portions Copyright (C) 1995-2003 Internet Software Consortium.
  5. *
  6. * Permission to use, copy, modify, and/or distribute this software for any
  7. * purpose with or without fee is hereby granted, provided that the above
  8. * copyright notice and this permission notice appear in all copies.
  9. *
  10. * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  11. * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  12. * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  13. * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  14. * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  15. * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  16. * PERFORMANCE OF THIS SOFTWARE.
  17. */
  18. /*
  19. * Copyright (c) 1983, 1987, 1989
  20. * The Regents of the University of California. All rights reserved.
  21. *
  22. * Redistribution and use in source and binary forms, with or without
  23. * modification, are permitted provided that the following conditions
  24. * are met:
  25. * 1. Redistributions of source code must retain the above copyright
  26. * notice, this list of conditions and the following disclaimer.
  27. * 2. Redistributions in binary form must reproduce the above copyright
  28. * notice, this list of conditions and the following disclaimer in the
  29. * documentation and/or other materials provided with the distribution.
  30. * 3. Neither the name of the University nor the names of its contributors
  31. * may be used to endorse or promote products derived from this software
  32. * without specific prior written permission.
  33. *
  34. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  35. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  36. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  37. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  38. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  39. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  40. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  41. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  42. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  43. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  44. * SUCH DAMAGE.
  45. */
  46. /*%
  47. * @(#)resolv.h 8.1 (Berkeley) 6/2/93
  48. * Id: resolv.h,v 1.30 2009/03/03 01:52:48 each Exp
  49. */
  50. #ifndef _RESOLV_H_
  51. #define _RESOLV_H_
  52. #include <sys/param.h>
  53. #if (!defined(BSD)) || (BSD < 199306)
  54. # include <sys/bitypes.h>
  55. #else
  56. #include <sys/types.h>
  57. #endif
  58. #include <sys/cdefs.h>
  59. #include <sys/socket.h>
  60. #include <stdio.h>
  61. #include <arpa/nameser.h>
  62. /*%
  63. * Revision information. This is the release date in YYYYMMDD format.
  64. * It can change every day so the right thing to do with it is use it
  65. * in preprocessor commands such as "#if (__RES > 19931104)". Do not
  66. * compare for equality; rather, use it to determine whether your resolver
  67. * is new enough to contain a certain feature.
  68. */
  69. #define __RES 20090302
  70. /*%
  71. * This used to be defined in res_query.c, now it's in herror.c.
  72. * [XXX no it's not. It's in irs/irs_data.c]
  73. * It was
  74. * never extern'd by any *.h file before it was placed here. For thread
  75. * aware programs, the last h_errno value set is stored in res->h_errno.
  76. *
  77. * XXX: There doesn't seem to be a good reason for exposing RES_SET_H_ERRNO
  78. * (and __h_errno_set) to the public via <resolv.h>.
  79. * XXX: __h_errno_set is really part of IRS, not part of the resolver.
  80. * If somebody wants to build and use a resolver that doesn't use IRS,
  81. * what do they do? Perhaps something like
  82. * #ifdef WANT_IRS
  83. * # define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
  84. * #else
  85. * # define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x))
  86. * #endif
  87. */
  88. #define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
  89. struct __res_state; /*%< forward */
  90. __BEGIN_DECLS
  91. void __h_errno_set(struct __res_state *, int);
  92. __END_DECLS
  93. /*%
  94. * Resolver configuration file.
  95. * Normally not present, but may contain the address of the
  96. * initial name server(s) to query and the domain search list.
  97. */
  98. #ifndef _PATH_RESCONF
  99. #define _PATH_RESCONF "/etc/resolv.conf"
  100. #endif
  101. typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
  102. res_sendhookact;
  103. typedef res_sendhookact (*res_send_qhook)(struct sockaddr * const *,
  104. const u_char **, int *,
  105. u_char *, int, int *);
  106. typedef res_sendhookact (*res_send_rhook)(const struct sockaddr *,
  107. const u_char *, int, u_char *,
  108. int, int *);
  109. struct res_sym {
  110. int number; /*%< Identifying number, like T_MX */
  111. const char * name; /*%< Its symbolic name, like "MX" */
  112. const char * humanname; /*%< Its fun name, like "mail exchanger" */
  113. };
  114. /*%
  115. * Global defines and variables for resolver stub.
  116. */
  117. #define MAXNS 3 /*%< max # name servers we'll track */
  118. #define MAXDFLSRCH 3 /*%< # default domain levels to try */
  119. #define MAXDNSRCH 6 /*%< max # domains in search path */
  120. #define LOCALDOMAINPARTS 2 /*%< min levels in name that is "local" */
  121. #define RES_TIMEOUT 5 /*%< min. seconds between retries */
  122. #define MAXRESOLVSORT 10 /*%< number of net to sort on */
  123. #define RES_MAXNDOTS 15 /*%< should reflect bit field size */
  124. #define RES_MAXRETRANS 30 /*%< only for resolv.conf/RES_OPTIONS */
  125. #define RES_MAXRETRY 5 /*%< only for resolv.conf/RES_OPTIONS */
  126. #define RES_DFLRETRY 2 /*%< Default #/tries. */
  127. #define RES_MAXTIME 65535 /*%< Infinity, in milliseconds. */
  128. struct __res_state_ext;
  129. struct __res_state {
  130. int retrans; /*%< retransmission time interval */
  131. int retry; /*%< number of times to retransmit */
  132. #ifdef sun
  133. u_int options; /*%< option flags - see below. */
  134. #else
  135. u_long options; /*%< option flags - see below. */
  136. #endif
  137. int nscount; /*%< number of name servers */
  138. struct sockaddr_in
  139. nsaddr_list[MAXNS]; /*%< address of name server */
  140. #define nsaddr nsaddr_list[0] /*%< for backward compatibility */
  141. u_short id; /*%< current message id */
  142. char *dnsrch[MAXDNSRCH+1]; /*%< components of domain to search */
  143. char defdname[256]; /*%< default domain (deprecated) */
  144. #ifdef sun
  145. u_int pfcode; /*%< RES_PRF_ flags - see below. */
  146. #else
  147. u_long pfcode; /*%< RES_PRF_ flags - see below. */
  148. #endif
  149. unsigned ndots:4; /*%< threshold for initial abs. query */
  150. unsigned nsort:4; /*%< number of elements in sort_list[] */
  151. char unused[3];
  152. struct {
  153. struct in_addr addr;
  154. uint32_t mask;
  155. } sort_list[MAXRESOLVSORT];
  156. #ifdef __OLD_RES_STATE
  157. char lookups[4];
  158. #else
  159. res_send_qhook qhook; /*%< query hook */
  160. res_send_rhook rhook; /*%< response hook */
  161. int res_h_errno; /*%< last one set for this context */
  162. int _vcsock; /*%< PRIVATE: for res_send VC i/o */
  163. u_int _flags; /*%< PRIVATE: see below */
  164. u_int _pad; /*%< make _u 64 bit aligned */
  165. union {
  166. /* On an 32-bit arch this means 512b total. */
  167. char pad[56 - 4*sizeof (int) - 3*sizeof (void *)];
  168. struct {
  169. uint16_t nscount;
  170. uint16_t nstimes[MAXNS]; /*%< ms. */
  171. int nssocks[MAXNS];
  172. struct __res_state_ext *ext; /*%< extention for IPv6 */
  173. } _ext;
  174. } _u;
  175. u_char *_rnd; /*%< PRIVATE: random state */
  176. #endif
  177. };
  178. typedef struct __res_state *res_state;
  179. union res_sockaddr_union {
  180. struct sockaddr_in sin;
  181. #ifdef IN6ADDR_ANY_INIT
  182. struct sockaddr_in6 sin6;
  183. #endif
  184. #ifdef ISC_ALIGN64
  185. int64_t __align64; /*%< 64bit alignment */
  186. #else
  187. int32_t __align32; /*%< 32bit alignment */
  188. #endif
  189. char __space[128]; /* max size */
  190. };
  191. /*%
  192. * Resolver flags (used to be discrete per-module statics ints).
  193. */
  194. #define RES_F_VC 0x00000001 /*%< socket is TCP */
  195. #define RES_F_CONN 0x00000002 /*%< socket is connected */
  196. #define RES_F_EDNS0ERR 0x00000004 /*%< EDNS0 caused errors */
  197. #define RES_F__UNUSED 0x00000008 /*%< (unused) */
  198. #define RES_F_LASTMASK 0x000000F0 /*%< ordinal server of last res_nsend */
  199. #define RES_F_LASTSHIFT 4 /*%< bit position of LASTMASK "flag" */
  200. #define RES_GETLAST(res) (((res)._flags & RES_F_LASTMASK) >> RES_F_LASTSHIFT)
  201. /* res_findzonecut2() options */
  202. #define RES_EXHAUSTIVE 0x00000001 /*%< always do all queries */
  203. #define RES_IPV4ONLY 0x00000002 /*%< IPv4 only */
  204. #define RES_IPV6ONLY 0x00000004 /*%< IPv6 only */
  205. /*%
  206. * Resolver options (keep these in synch with res_debug.c, please)
  207. */
  208. #define RES_INIT 0x00000001 /*%< address initialized */
  209. #define RES_DEBUG 0x00000002 /*%< print debug messages */
  210. #define RES_AAONLY 0x00000004 /*%< authoritative answers only (!IMPL)*/
  211. #define RES_USEVC 0x00000008 /*%< use virtual circuit */
  212. #define RES_PRIMARY 0x00000010 /*%< query primary server only (!IMPL) */
  213. #define RES_IGNTC 0x00000020 /*%< ignore trucation errors */
  214. #define RES_RECURSE 0x00000040 /*%< recursion desired */
  215. #define RES_DEFNAMES 0x00000080 /*%< use default domain name */
  216. #define RES_STAYOPEN 0x00000100 /*%< Keep TCP socket open */
  217. #define RES_DNSRCH 0x00000200 /*%< search up local domain tree */
  218. #define RES_INSECURE1 0x00000400 /*%< type 1 security disabled */
  219. #define RES_INSECURE2 0x00000800 /*%< type 2 security disabled */
  220. #define RES_NOALIASES 0x00001000 /*%< shuts off HOSTALIASES feature */
  221. #define RES_USE_INET6 0x00002000 /*%< use/map IPv6 in gethostbyname() */
  222. #define RES_ROTATE 0x00004000 /*%< rotate ns list after each query */
  223. #define RES_NOCHECKNAME 0x00008000 /*%< do not check names for sanity. */
  224. #define RES_KEEPTSIG 0x00010000 /*%< do not strip TSIG records */
  225. #define RES_BLAST 0x00020000 /*%< blast all recursive servers */
  226. #define RES_NSID 0x00040000 /*%< request name server ID */
  227. #define RES_NOTLDQUERY 0x00100000 /*%< don't unqualified name as a tld */
  228. #define RES_USE_DNSSEC 0x00200000 /*%< use DNSSEC using OK bit in OPT */
  229. /* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */
  230. /* KAME extensions: use higher bit to avoid conflict with ISC use */
  231. #define RES_USE_DNAME 0x10000000 /*%< use DNAME */
  232. #define RES_USE_EDNS0 0x40000000 /*%< use EDNS0 if configured */
  233. #define RES_NO_NIBBLE2 0x80000000 /*%< disable alternate nibble lookup */
  234. #define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \
  235. RES_DNSRCH | RES_NO_NIBBLE2)
  236. /*%
  237. * Resolver "pfcode" values. Used by dig.
  238. */
  239. #define RES_PRF_STATS 0x00000001
  240. #define RES_PRF_UPDATE 0x00000002
  241. #define RES_PRF_CLASS 0x00000004
  242. #define RES_PRF_CMD 0x00000008
  243. #define RES_PRF_QUES 0x00000010
  244. #define RES_PRF_ANS 0x00000020
  245. #define RES_PRF_AUTH 0x00000040
  246. #define RES_PRF_ADD 0x00000080
  247. #define RES_PRF_HEAD1 0x00000100
  248. #define RES_PRF_HEAD2 0x00000200
  249. #define RES_PRF_TTLID 0x00000400
  250. #define RES_PRF_HEADX 0x00000800
  251. #define RES_PRF_QUERY 0x00001000
  252. #define RES_PRF_REPLY 0x00002000
  253. #define RES_PRF_INIT 0x00004000
  254. #define RES_PRF_TRUNC 0x00008000
  255. /* 0x00010000 */
  256. /* Things involving an internal (static) resolver context. */
  257. __BEGIN_DECLS
  258. extern struct __res_state *__res_get_state(void);
  259. extern void __res_put_state(struct __res_state *);
  260. /*
  261. * Source and Binary compatibility; _res will not work properly
  262. * with multi-threaded programs.
  263. */
  264. extern struct __res_state *__res_state(void);
  265. #define _res (*__res_state())
  266. __END_DECLS
  267. #ifndef __BIND_NOSTATIC
  268. #define fp_nquery __fp_nquery
  269. #define fp_query __fp_query
  270. #define hostalias __hostalias
  271. #define p_query __p_query
  272. #define res_close __res_close
  273. #define res_isourserver __res_isourserver
  274. #define res_opt __res_opt
  275. #define res_querydomain __res_querydomain
  276. #define res_send __res_send
  277. #define res_sendsigned __res_sendsigned
  278. #ifdef notdef
  279. /* NetBSD protects these via weak symbols. */
  280. #define res_init __res_init
  281. #define res_query __res_query
  282. #define res_mkquery __res_mkquery
  283. #define dn_expand __dn_expand
  284. #define res_search __res_search
  285. #endif
  286. __BEGIN_DECLS
  287. void fp_nquery(const u_char *, int, FILE *);
  288. void fp_query(const u_char *, FILE *);
  289. const char * hostalias(const char *);
  290. void p_query(const u_char *);
  291. void res_close(void);
  292. int res_init(void);
  293. int res_opt(int, u_char *, int, int);
  294. int res_isourserver(const struct sockaddr_in *);
  295. int res_mkquery(int, const char *, int, int, const u_char *,
  296. int, const u_char *, u_char *, int);
  297. int res_query(const char *, int, int, u_char *, int);
  298. int res_querydomain(const char *, const char *, int, int,
  299. u_char *, int);
  300. int res_search(const char *, int, int, u_char *, int);
  301. int res_send(const u_char *, int, u_char *, int);
  302. int res_sendsigned(const u_char *, int, ns_tsig_key *,
  303. u_char *, int);
  304. __END_DECLS
  305. #endif
  306. #if !defined(SHARED_LIBBIND) || defined(LIB)
  307. /*
  308. * If libbind is a shared object (well, DLL anyway)
  309. * these externs break the linker when resolv.h is
  310. * included by a lib client (like named)
  311. * Make them go away if a client is including this
  312. *
  313. */
  314. extern const struct res_sym __p_key_syms[];
  315. extern const struct res_sym __p_cert_syms[];
  316. extern const struct res_sym __p_class_syms[];
  317. extern const struct res_sym __p_type_syms[];
  318. extern const struct res_sym __p_rcode_syms[];
  319. #endif /* SHARED_LIBBIND */
  320. #define b64_ntop __b64_ntop
  321. #define b64_pton __b64_pton
  322. #define dn_comp __dn_comp
  323. #define dn_count_labels __dn_count_labels
  324. #define dn_skipname __dn_skipname
  325. #define fp_resstat __fp_resstat
  326. #define loc_aton __loc_aton
  327. #define loc_ntoa __loc_ntoa
  328. #define p_cdname __p_cdname
  329. #define p_cdnname __p_cdnname
  330. #define p_class __p_class
  331. #define p_fqname __p_fqname
  332. #define p_fqnname __p_fqnname
  333. #define p_option __p_option
  334. #define p_secstodate __p_secstodate
  335. #define p_section __p_section
  336. #define p_time __p_time
  337. #define p_type __p_type
  338. #define p_rcode __p_rcode
  339. #define p_sockun __p_sockun
  340. #define putlong __putlong
  341. #define putshort __putshort
  342. #define res_check __res_check
  343. #define res_dnok __res_dnok
  344. #define res_findzonecut __res_findzonecut
  345. #define res_findzonecut2 __res_findzonecut2
  346. #define res_hnok __res_hnok
  347. #define res_hostalias __res_hostalias
  348. #define res_mailok __res_mailok
  349. #define res_nameinquery __res_nameinquery
  350. #define res_nclose __res_nclose
  351. #define res_ninit __res_ninit
  352. #define res_nmkquery __res_nmkquery
  353. #define res_pquery __res_pquery
  354. #define res_nquery __res_nquery
  355. #define res_nquerydomain __res_nquerydomain
  356. #define res_nsearch __res_nsearch
  357. #define res_nsend __res_nsend
  358. #define res_nsendsigned __res_nsendsigned
  359. #define res_nisourserver __res_nisourserver
  360. #define res_ownok __res_ownok
  361. #define res_queriesmatch __res_queriesmatch
  362. #define res_rndinit __res_rndinit
  363. #define res_randomid __res_randomid
  364. #define res_nrandomid __res_nrandomid
  365. #define sym_ntop __sym_ntop
  366. #define sym_ntos __sym_ntos
  367. #define sym_ston __sym_ston
  368. #define res_nopt __res_nopt
  369. #define res_nopt_rdata __res_nopt_rdata
  370. #define res_ndestroy __res_ndestroy
  371. #define res_nametoclass __res_nametoclass
  372. #define res_nametotype __res_nametotype
  373. #define res_setservers __res_setservers
  374. #define res_getservers __res_getservers
  375. #define res_buildprotolist __res_buildprotolist
  376. #define res_destroyprotolist __res_destroyprotolist
  377. #define res_destroyservicelist __res_destroyservicelist
  378. #define res_get_nibblesuffix __res_get_nibblesuffix
  379. #define res_get_nibblesuffix2 __res_get_nibblesuffix2
  380. #define res_ourserver_p __res_ourserver_p
  381. #define res_protocolname __res_protocolname
  382. #define res_protocolnumber __res_protocolnumber
  383. #define res_send_setqhook __res_send_setqhook
  384. #define res_send_setrhook __res_send_setrhook
  385. #define res_servicename __res_servicename
  386. #define res_servicenumber __res_servicenumber
  387. __BEGIN_DECLS
  388. int res_hnok(const char *);
  389. int res_ownok(const char *);
  390. int res_mailok(const char *);
  391. struct timespec;
  392. int res_check(res_state, struct timespec *);
  393. int res_dnok(const char *);
  394. int sym_ston(const struct res_sym *, const char *, int *);
  395. const char * sym_ntos(const struct res_sym *, int, int *);
  396. const char * sym_ntop(const struct res_sym *, int, int *);
  397. int b64_ntop(u_char const *, size_t, char *, size_t);
  398. int b64_pton(char const *, u_char *, size_t);
  399. int loc_aton(const char *, u_char *);
  400. const char * loc_ntoa(const u_char *, char *);
  401. int dn_skipname(const u_char *, const u_char *);
  402. void putlong(uint32_t, u_char *);
  403. void putshort(uint16_t, u_char *);
  404. #ifndef __ultrix__
  405. uint16_t _getshort(const u_char *);
  406. uint32_t _getlong(const u_char *);
  407. #endif
  408. const char * p_class(int);
  409. const char * p_time(uint32_t);
  410. const char * p_type(int);
  411. const char * p_rcode(int);
  412. const char * p_sockun(union res_sockaddr_union, char *, size_t);
  413. const u_char * p_cdnname(const u_char *, const u_char *, int, FILE *);
  414. const u_char * p_cdname(const u_char *, const u_char *, FILE *);
  415. const u_char * p_fqnname(const u_char *, const u_char *,
  416. int, char *, int);
  417. const u_char * p_fqname(const u_char *, const u_char *, FILE *);
  418. const char * p_option(u_long);
  419. char * p_secstodate(u_long);
  420. int dn_count_labels(const char *);
  421. int dn_comp(const char *, u_char *, int, u_char **, u_char **);
  422. int dn_expand(const u_char *, const u_char *, const u_char *,
  423. char *, int);
  424. void res_rndinit(res_state);
  425. u_int res_randomid(void);
  426. u_int res_nrandomid(res_state);
  427. int res_nameinquery(const char *, int, int, const u_char *,
  428. const u_char *);
  429. int res_queriesmatch(const u_char *, const u_char *,
  430. const u_char *, const u_char *);
  431. const char * p_section(int, int);
  432. /* Things involving a resolver context. */
  433. int res_ninit(res_state);
  434. int res_nisourserver(const res_state, const struct sockaddr_in *);
  435. void fp_resstat(const res_state, FILE *);
  436. void res_pquery(const res_state, const u_char *, int, FILE *);
  437. const char * res_hostalias(const res_state, const char *, char *, size_t);
  438. int res_nquery(res_state, const char *, int, int, u_char *, int);
  439. int res_nsearch(res_state, const char *, int, int, u_char *, int);
  440. int res_nquerydomain(res_state, const char *, const char *,
  441. int, int, u_char *, int);
  442. int res_nmkquery(res_state, int, const char *, int, int,
  443. const u_char *, int, const u_char *,
  444. u_char *, int);
  445. int res_nsend(res_state, const u_char *, int, u_char *, int);
  446. int res_nsendsigned(res_state, const u_char *, int,
  447. ns_tsig_key *, u_char *, int);
  448. int res_findzonecut(res_state, const char *, ns_class, int,
  449. char *, size_t, struct in_addr *, int);
  450. int res_findzonecut2(res_state, const char *, ns_class, int,
  451. char *, size_t,
  452. union res_sockaddr_union *, int);
  453. void res_nclose(res_state);
  454. int res_nopt(res_state, int, u_char *, int, int);
  455. int res_nopt_rdata(res_state, int, u_char *, int, u_char *,
  456. u_short, u_short, u_char *);
  457. void res_send_setqhook(res_send_qhook);
  458. void res_send_setrhook(res_send_rhook);
  459. int __res_vinit(res_state, int);
  460. void res_destroyservicelist(void);
  461. const char * res_servicename(uint16_t, const char *);
  462. const char * res_protocolname(int);
  463. void res_destroyprotolist(void);
  464. void res_buildprotolist(void);
  465. const char * res_get_nibblesuffix(res_state);
  466. const char * res_get_nibblesuffix2(res_state);
  467. void res_ndestroy(res_state);
  468. uint16_t res_nametoclass(const char *, int *);
  469. uint16_t res_nametotype(const char *, int *);
  470. void res_setservers(res_state,
  471. const union res_sockaddr_union *, int);
  472. int res_getservers(res_state,
  473. union res_sockaddr_union *, int);
  474. __END_DECLS
  475. #endif /* !_RESOLV_H_ */