lwres_getipnode.docbook revision f5d30e2864e048a42c4dc1134993ae7efdb5d6c3
230N/A<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.0//EN"
230N/A "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"
230N/A [<!ENTITY mdash "&#8212;">]>
230N/A<!--
230N/A - Copyright (C) 2004, 2005 Internet Systems Consortium, Inc. ("ISC")
230N/A - Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
230N/A -
230N/A - Permission to use, copy, modify, and distribute this software for any
230N/A - purpose with or without fee is hereby granted, provided that the above
230N/A - copyright notice and this permission notice appear in all copies.
230N/A -
230N/A - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
230N/A - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
230N/A - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
230N/A - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
230N/A - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
230N/A - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
230N/A - PERFORMANCE OF THIS SOFTWARE.
230N/A-->
230N/A
230N/A<!-- $Id: lwres_getipnode.docbook,v 1.9 2005/05/13 01:35:46 marka Exp $ -->
5680N/A<refentry>
230N/A
5680N/A <refentryinfo>
230N/A <date>Jun 30, 2000</date>
230N/A </refentryinfo>
230N/A
5184N/A <refmeta>
844N/A <refentrytitle>lwres_getipnode</refentrytitle>
5184N/A <manvolnum>3</manvolnum>
230N/A <refmiscinfo>BIND9</refmiscinfo>
5184N/A </refmeta>
618N/A
1258N/A <docinfo>
230N/A <copyright>
5184N/A <year>2004</year>
2899N/A <year>2005</year>
5680N/A <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
230N/A </copyright>
230N/A <copyright>
230N/A <year>2000</year>
230N/A <year>2001</year>
230N/A <year>2003</year>
230N/A <holder>Internet Software Consortium.</holder>
230N/A </copyright>
230N/A </docinfo>
230N/A
230N/A <refnamediv>
230N/A <refname>lwres_getipnodebyname</refname>
230N/A <refname>lwres_getipnodebyaddr</refname>
230N/A <refname>lwres_freehostent</refname>
230N/A <refpurpose>lightweight resolver nodename / address translation API</refpurpose>
230N/A </refnamediv>
230N/A <refsynopsisdiv>
230N/A <funcsynopsis>
230N/A<funcsynopsisinfo>#include &lt;lwres/netdb.h&gt;</funcsynopsisinfo>
230N/A<funcprototype>
230N/A <funcdef>
230N/Astruct hostent *
230N/A<function>lwres_getipnodebyname</function></funcdef>
230N/A <paramdef>const char *<parameter>name</parameter></paramdef>
230N/A <paramdef>int <parameter>af</parameter></paramdef>
6479N/A <paramdef>int <parameter>flags</parameter></paramdef>
230N/A <paramdef>int *<parameter>error_num</parameter></paramdef>
230N/A </funcprototype>
230N/A<funcprototype>
230N/A <funcdef>
230N/Astruct hostent *
230N/A<function>lwres_getipnodebyaddr</function></funcdef>
230N/A <paramdef>const void *<parameter>src</parameter></paramdef>
230N/A <paramdef>size_t <parameter>len</parameter></paramdef>
230N/A <paramdef>int <parameter>af</parameter></paramdef>
230N/A <paramdef>int *<parameter>error_num</parameter></paramdef>
230N/A </funcprototype>
230N/A<funcprototype>
5680N/A <funcdef>
230N/Avoid
230N/A<function>lwres_freehostent</function></funcdef>
230N/A <paramdef>struct hostent *<parameter>he</parameter></paramdef>
230N/A </funcprototype>
230N/A</funcsynopsis>
230N/A </refsynopsisdiv>
230N/A
230N/A <refsect1>
230N/A <title>DESCRIPTION</title>
230N/A
230N/A <para>
230N/A These functions perform thread safe, protocol independent
230N/A nodename-to-address and address-to-nodename
230N/A translation as defined in RFC2553.
230N/A </para>
230N/A
230N/A <para>
230N/A They use a
230N/A <type>struct hostent</type>
230N/A which is defined in
230N/A <filename>namedb.h</filename>:
230N/A </para>
4547N/A <para><programlisting>
4547N/Astruct hostent {
4547N/A char *h_name; /* official name of host */
4547N/A char **h_aliases; /* alias list */
5184N/A int h_addrtype; /* host address type */
5184N/A int h_length; /* length of address */
5184N/A char **h_addr_list; /* list of addresses from name server */
1639N/A};
1639N/A#define h_addr h_addr_list[0] /* address, for backward compatibility */
230N/A</programlisting>
230N/A </para>
230N/A
3817N/A <para>
3817N/A The members of this structure are:
3817N/A <variablelist>
3817N/A <varlistentry>
<term><constant>h_name</constant></term>
<listitem>
<para>
The official (canonical) name of the host.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>h_aliases</constant></term>
<listitem>
<para>
A NULL-terminated array of alternate names (nicknames) for the
host.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>h_addrtype</constant></term>
<listitem>
<para>
The type of address being returned - usually
<type>PF_INET</type>
or
<type>PF_INET6</type>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>h_length</constant></term>
<listitem>
<para>
The length of the address in bytes.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>h_addr_list</constant></term>
<listitem>
<para>
A
<type>NULL</type>
terminated array of network addresses for the host.
Host addresses are returned in network byte order.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para><function>lwres_getipnodebyname()</function>
looks up addresses of protocol family <parameter>af</parameter>
for the hostname <parameter>name</parameter>. The
<parameter>flags</parameter> parameter contains ORed flag bits
to specify the types of addresses that are searched for, and the
types of addresses that are returned. The flag bits are:
<variablelist>
<varlistentry>
<term><constant>AI_V4MAPPED</constant></term>
<listitem>
<para>
This is used with an
<parameter>af</parameter>
of AF_INET6, and causes IPv4 addresses to be returned as
IPv4-mapped
IPv6 addresses.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>AI_ALL</constant></term>
<listitem>
<para>
This is used with an
<parameter>af</parameter>
of AF_INET6, and causes all known addresses (IPv6 and IPv4) to
be returned.
If AI_V4MAPPED is also set, the IPv4 addresses are return as
mapped
IPv6 addresses.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>AI_ADDRCONFIG</constant></term>
<listitem>
<para>
Only return an IPv6 or IPv4 address if here is an active network
interface of that type. This is not currently implemented
in the BIND 9 lightweight resolver, and the flag is ignored.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>AI_DEFAULT</constant></term>
<listitem>
<para>
This default sets the
<constant>AI_V4MAPPED</constant>
and
<constant>AI_ADDRCONFIG</constant>
flag bits.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para><function>lwres_getipnodebyaddr()</function>
performs a reverse lookup of address <parameter>src</parameter>
which is <parameter>len</parameter> bytes long.
<parameter>af</parameter> denotes the protocol family, typically
<type>PF_INET</type> or <type>PF_INET6</type>.
</para>
<para><function>lwres_freehostent()</function>
releases all the memory associated with the <type>struct
hostent</type> pointer <parameter>he</parameter>. Any memory
allocated for the <constant>h_name</constant>,
<constant>h_addr_list</constant> and
<constant>h_aliases</constant> is freed, as is the memory for
the <type>hostent</type> structure itself.
</para>
</refsect1>
<refsect1>
<title>RETURN VALUES</title>
<para>
If an error occurs,
<function>lwres_getipnodebyname()</function>
and
<function>lwres_getipnodebyaddr()</function>
set
<parameter>*error_num</parameter>
to an appropriate error code and the function returns a
<type>NULL</type>
pointer.
The error codes and their meanings are defined in
<filename>&lt;lwres/netdb.h&gt;</filename>:
<variablelist>
<varlistentry>
<term><constant>HOST_NOT_FOUND</constant></term>
<listitem>
<para>
No such host is known.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>NO_ADDRESS</constant></term>
<listitem>
<para>
The server recognised the request and the name but no address is
available. Another type of request to the name server for the
domain might return an answer.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>TRY_AGAIN</constant></term>
<listitem>
<para>
A temporary and possibly transient error occurred, such as a
failure of a server to respond. The request may succeed if
retried.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>NO_RECOVERY</constant></term>
<listitem>
<para>
An unexpected failure occurred, and retrying the request
is pointless.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para><citerefentry>
<refentrytitle>lwres_hstrerror</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>
translates these error codes to suitable error messages.
</para>
</refsect1>
<refsect1>
<title>SEE ALSO</title>
<para><citerefentry>
<refentrytitle>RFC2553</refentrytitle>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_gethostent</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_getaddrinfo</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_getnameinfo</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_hstrerror</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>.
</para>
</refsect1>
</refentry><!--
- Local variables:
- mode: sgml
- End:
-->