chiark / gitweb /
buf.h: Spurious `\' prevents declaration of `buf_putstr*'.
[mLib] / bres.3
CommitLineData
83856dde 1.\" -*-nroff-*-
fbf20b5b 2.TH bres 3 "1 October 1999" "Straylight/Edgeware" "mLib utilities library"
83856dde 3.SH NAME
4bres \- background name resolver
5.\" @bres_abort
6.\" @bres_byname
7.\" @bres_byaddr
8.\" @bres_exec
9.\" @bres_init
10.SH SYNOPSIS
11.nf
12.B "#include <mLib/bres.h>"
13
14.BI "void bres_byname(bres_client *" rc ", const char *" name ,
15.BI " void (*" func ")(struct hostent *" h ", void *" p ),
16.BI " void *" p );
17.BI "void bres_byaddr(bres_client *" rc ", struct inaddr " addr ,
18.BI " void (*" func ")(struct hostent *" h ", void *" p ),
19.BI " void *" p );
20.BI "void bres_abort(bres_client *" rc );
21.BI "void bres_exec(const char *" file );
22.BI "void bres_init(sel_state *" sel );
23.fi
24.SH DESCRIPTION
25The
26.B bres.h
27header file declares types and functions for doing translation between
28host names and IP addresses in the background.
29.PP
30The system must be initialized before use by a call to
31.BR bres_init ,
32passing it the address of an I/O multiplexor (see
33.BR sel (3)).
34.PP
35A resolver task is stored in an object of type
36.BR bres_client ,
37the storage for which is allocated by the caller. The object is a
38structure, and its contents are unspecified. The object is initialized
39by one of the name resolution functions
40.B bres_byname
41and
42.BR bres_byaddr .
43Each function is passed the following arguments:
44.TP
45.BI "bres_client *" rc
46Pointer to the client block to initialize and store the resolver job's
47state.
48.TP
49.BI "struct in_addr " addr "\fR (\fBbres_byaddr\fR)"
50.sp -1
51.TP
52.BI "const char *" name "\fR (\fBbres_byname\fR)"
53The IP address or hostname to resolve.
54.TP
55.BI "void (*" func ")(struct hostent *" h ", void *" p )
56A handler function to call when the resolver job is complete.
57.TP
58.BI "void *" p
59A pointer argument to pass to the handler function.
60.PP
61The
62.B bres_client
63block must not be discarded until either the job is complete (i.e., the
64handler function has been called) or
65.B bres_abort
66is called on it.
67.PP
68The handler function is passed either the address of a
69.B "struct hostent"
70structure describing the resolved host, or a null pointer indicating
71failure. The
72.B hostent
73structure is as returned by the standard
74.BR gethostbyname (3)
75and
76.BR gethostbyaddr (3)
77functions. This isn't the most convenient format for the results, but
78it does have the benefit of being standard. Similarly, errors are
79reported through the global
80.B h_errno
81variable.
82.PP
83The function
84.B bres_abort
85cancels a running resolver job. When it returns, the client structure
86is safe to discard.
87.PP
d4efbcd9 88There are two versions of
14d7100d 89.BR bres .
90The standard one uses a pool of server processes. Incoming resolver
91jobs are passed to an available server, or a new server is started if
92all are busy. There is a maximum number of servers, and jobs are queued
93once this limit is reached. Old servers which have been idle for a
94period of time are killed off. Servers are also killed if they start
95misbehaving or their jobs are aborted.
83856dde 96.PP
97By default, servers are started simply by calling
98.BR fork (2).
99This can cause undesirably high memory usage in large programs. The
100function
101.B bres_exec
102requests the resolver system to
103.BR exec (2)
104a small dedicated server program to perform name lookups to reduce
105memory consumption. The argument to
106.B bres_exec
107is the full pathname of the server program, or null to accept the
108default set at library configuration time (which is usually correct).
109.PP
14d7100d 110The other implementation of
111.B bres
112uses the
113.B adns
114library to do asynchronous resolution. It can cope with many more
115simultaneous resolver jobs, and doesn't use up external processes. If
116you're using the
117.BR adns -based
118resolver, then the
119.B bres_exec
120function does nothing at all.
121.PP
83856dde 122For security reasons, when an address is resolved, the hostname received
123is verified by performing a forward lookup. If the forward lookup fails
124to return the expected IP address, an error is reported.
125.SH "SEE ALSO"
126.BR gethostbyname (3),
127.BR gethostbyaddr (3),
128.BR sel (3),
129.BR mLib (3).
130.SH "AUTHOR"
9b5ac6ff 131Mark Wooding, <mdw@distorted.org.uk>