Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / resolv.h @ 14

History | View | Annotate | Download (18.9 KB)

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