<!
DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" [<!ENTITY mdash "—">]>
- Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2000, 2001, 2003 Internet Software Consortium. - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. <
date>Jun 30, 2000</
date>
<
refentrytitle>lwres_context</
refentrytitle>
<
refmiscinfo>BIND9</
refmiscinfo>
<
holder>Internet Systems Consortium, Inc. ("ISC")</
holder>
<
holder>Internet Software Consortium.</
holder>
<
refname>lwres_context_create</
refname>
<
refname>lwres_context_destroy</
refname>
<
refname>lwres_context_nextserial</
refname>
<
refname>lwres_context_initserial</
refname>
<
refname>lwres_context_freemem</
refname>
<
refname>lwres_context_allocmem</
refname>
<
refname>lwres_context_sendrecv</
refname>
<
refpurpose>lightweight resolver context management</
refpurpose>
<
funcsynopsisinfo>#include <
lwres/
lwres.h></
funcsynopsisinfo>
<
function>lwres_context_create</
function></
funcdef>
<
paramdef>lwres_context_t **<
parameter>contextp</
parameter></
paramdef>
<
paramdef>void *<
parameter>arg</
parameter></
paramdef>
<
paramdef>lwres_malloc_t <
parameter>malloc_function</
parameter></
paramdef>
<
paramdef>lwres_free_t <
parameter>free_function</
parameter></
paramdef>
<
function>lwres_context_destroy</
function></
funcdef>
<
paramdef>lwres_context_t **<
parameter>contextp</
parameter></
paramdef>
<
function>lwres_context_initserial</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_uint32_t <
parameter>serial</
parameter></
paramdef>
<
function>lwres_context_nextserial</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
function>lwres_context_freemem</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>void *<
parameter>mem</
parameter></
paramdef>
<
paramdef>size_t <
parameter>len</
parameter></
paramdef>
<
function>lwres_context_allocmem</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>size_t <
parameter>len</
parameter></
paramdef>
<
function>lwres_context_sendrecv</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>void *<
parameter>sendbase</
parameter></
paramdef>
<
paramdef>int <
parameter>sendlen</
parameter></
paramdef>
<
paramdef>void *<
parameter>recvbase</
parameter></
paramdef>
<
paramdef>int <
parameter>recvlen</
parameter></
paramdef>
<
paramdef>int *<
parameter>recvd_len</
parameter></
paramdef>
<
title>DESCRIPTION</
title>
<
para><
function>lwres_context_create()</
function>
creates a <
type>lwres_context_t</
type> structure for use in
lightweight resolver operations. It holds a socket and other
data needed for communicating with a resolver daemon. The new
<
type>lwres_context_t</
type> is returned through
<
parameter>contextp</
parameter>, a pointer to a
<
type>lwres_context_t</
type> pointer. This
<
type>lwres_context_t</
type> pointer must initially be NULL, and
is modified to point to the newly created
<
type>lwres_context_t</
type>.
When the lightweight resolver needs to perform dynamic memory
<
parameter>malloc_function</
parameter>
<
parameter>free_function</
parameter>
<
parameter>malloc_function</
parameter>
<
parameter>free_function</
parameter>
are NULL, memory is allocated using
<
refentrytitle>malloc</
refentrytitle><
manvolnum>3</
manvolnum>
<
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum>
It is not permitted to have a NULL
<
parameter>malloc_function</
parameter> and a non-NULL
<
parameter>free_function</
parameter> or vice versa.
<
parameter>arg</
parameter> is passed as the first parameter to
the memory allocation functions. If
<
parameter>malloc_function</
parameter> and
<
parameter>free_function</
parameter> are NULL,
<
parameter>arg</
parameter> is unused and should be passed as
Once memory for the structure has been allocated,
<
refentrytitle>lwres_conf_init</
refentrytitle><
manvolnum>3</
manvolnum>
and returned via <
parameter>*contextp</
parameter>.
<
para><
function>lwres_context_destroy()</
function>
destroys a <
type>lwres_context_t</
type>, closing its socket.
<
parameter>contextp</
parameter> is a pointer to a pointer to the
context that is to be destroyed. The pointer will be set to
NULL when the context has been destroyed.
The context holds a serial number that is used to identify
resolver request packets and associate responses with the
corresponding requests. This serial number is controlled using
<
function>lwres_context_initserial()</
function> and
<
function>lwres_context_nextserial()</
function>.
<
function>lwres_context_initserial()</
function> sets the serial
number for context <
parameter>*ctx</
parameter> to
<
parameter>serial</
parameter>.
<
function>lwres_context_nextserial()</
function> increments the
serial number and returns the previous value.
Memory for a lightweight resolver context is allocated and freed
using <
function>lwres_context_allocmem()</
function> and
<
function>lwres_context_freemem()</
function>. These use
whatever allocations were defined when the context was created
with <
function>lwres_context_create()</
function>.
<
function>lwres_context_allocmem()</
function> allocates
<
parameter>len</
parameter> bytes of memory and if successful
returns a pointer to the allocated storage.
<
function>lwres_context_freemem()</
function> frees
<
parameter>len</
parameter> bytes of space starting at location
<
parameter>mem</
parameter>.
<
para><
function>lwres_context_sendrecv()</
function>
performs I/O for the context <
parameter>ctx</
parameter>. Data
are read and written from the context's socket. It writes data
from <
parameter>sendbase</
parameter> — typically a
lightweight resolver query packet — and waits for a reply
which is copied to the receive buffer at
<
parameter>recvbase</
parameter>. The number of bytes that were
written to this receive buffer is returned in
<
parameter>*recvd_len</
parameter>.
<
title>RETURN VALUES</
title>
<
para><
function>lwres_context_create()</
function>
returns <
errorcode>LWRES_R_NOMEMORY</
errorcode> if memory for
the <
type>struct lwres_context</
type> could not be allocated,
<
errorcode>LWRES_R_SUCCESS</
errorcode> otherwise.
Successful calls to the memory allocator
<
function>lwres_context_allocmem()</
function>
return a pointer to the start of the allocated space.
It returns NULL if memory could not be allocated.
<
para><
errorcode>LWRES_R_SUCCESS</
errorcode>
<
function>lwres_context_sendrecv()</
function>
<
errorcode>LWRES_R_IOERROR</
errorcode>
is returned if an I/O error occurs and
<
errorcode>LWRES_R_TIMEOUT</
errorcode>
<
function>lwres_context_sendrecv()</
function>
times out waiting for a response.
<
refentrytitle>lwres_conf_init</
refentrytitle><
manvolnum>3</
manvolnum>
<
refentrytitle>malloc</
refentrytitle><
manvolnum>3</
manvolnum>
<
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum>