lwres_getaddrinfo.docbook revision ddccd5811feff696ba460dabfb666ce61040f545
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<!--
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont - Copyright (C) 2000, 2001 Internet Software Consortium.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont -
bf0266f286c9350f6579d03cc74429433d8e6381Tinderbox User - Permission to use, copy, modify, and distribute this software for any
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - purpose with or without fee is hereby granted, provided that the above
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - copyright notice and this permission notice appear in all copies.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont -
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont-->
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<!-- $Id: lwres_getaddrinfo.docbook,v 1.1 2001/03/31 00:08:09 gson Exp $ -->
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<refentry>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refentryinfo>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<date>Jun 30, 2000</date>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</refentryinfo>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<refmeta>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refentrytitle>lwres_getaddrinfo</refentrytitle>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<manvolnum>3</manvolnum>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refmiscinfo>BIND9</refmiscinfo>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</refmeta>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refnamediv>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refname>lwres_getaddrinfo</refname>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<refname>lwres_freeaddrinfo</refname>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refpurpose>socket address structure to host and service name</refpurpose>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</refnamediv>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refsynopsisdiv>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<funcsynopsis>
bf0266f286c9350f6579d03cc74429433d8e6381Tinderbox User<funcsynopsisinfo>#include &lt;lwres/netdb.h&gt;</funcsynopsisinfo>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<funcprototype>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<funcdef>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontint
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<function>lwres_getaddrinfo</function></funcdef>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<paramdef>const char *hostname</paramdef>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<paramdef>const char *servname</paramdef>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<paramdef>const struct addrinfo *hints</paramdef>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<paramdef>struct addrinfo **res</paramdef>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</funcprototype>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<funcprototype>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<funcdef>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntvoid
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<function>lwres_freeaddrinfo</function></funcdef>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<paramdef>struct addrinfo *ai</paramdef>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</funcprototype>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</funcsynopsis>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontIf the operating system does not provide a
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>struct addrinfo</type>,
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontthe following structure is used:
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<programlisting>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontstruct addrinfo {
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt int ai_family; /* PF_xxx */
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt int ai_socktype; /* SOCK_xxx */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont size_t ai_addrlen; /* length of ai_addr */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont char *ai_canonname; /* canonical name for hostname */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont struct sockaddr *ai_addr; /* binary address */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont struct addrinfo *ai_next; /* next structure in linked list */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont};
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</programlisting>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</refsynopsisdiv>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<refsect1>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<title>DESCRIPTION</title>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<para>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<function>lwres_getaddrinfo()</function>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntis used to get a list of IP addresses and port numbers for host
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>hostname</parameter>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontand service
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>servname</parameter>.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontThe function is the lightweight resolver's implementation of
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<function>getaddrinfo()</function>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontas defined in RFC2133.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>hostname</parameter>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntand
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<parameter>servname</parameter>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntare pointers to null-terminated
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontstrings or
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>NULL</type>.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>hostname</parameter>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontis either a host name or a numeric host address string: a dotted decimal
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntIPv4 address or an IPv6 address.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>servname</parameter>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontis either a decimal port number or a service name as listed in
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<filename>/etc/services</filename>.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>hints</parameter>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupontis an optional pointer to a
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>struct addrinfo</type>.
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis DupontThis structure can be used to provide hints concerning the type of socket
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntthat the caller supports or wishes to use.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntThe caller can supply the following structure elements in
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<parameter>*hints</parameter>:
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<variablelist>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<varlistentry><term><constant>ai_family</constant></term>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<listitem>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<para>The protocol family that should be used.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontWhen
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<constant>ai_family</constant>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntis set to
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>PF_UNSPEC</type>,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontit means the caller will accept any protocol family supported by the
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontoperating system.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<varlistentry><term><constant>ai_socktype</constant></term>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<listitem>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<para>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntdenotes the type of socket &mdash;
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>SOCK_STREAM</type>,
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>SOCK_DGRAM</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntor
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>SOCK_RAW</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt&mdash; that is wanted.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntWhen
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<constant>ai_socktype</constant>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupontis zero the caller will accept any socket type.
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont</para>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont</listitem>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<varlistentry><term><constant>ai_protocol</constant></term>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<listitem>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<para>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupontindicates which transport protocol is wanted: IPPROTO_UDP or
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntIPPROTO_TCP.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntIf
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<constant>ai_protocol</constant>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontis zero the caller will accept any protocol.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</listitem>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<varlistentry><term><constant>ai_flags</constant></term>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<listitem>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontFlag bits.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontIf the
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>AI_CANONNAME</type>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontbit is set, a successful call to
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<function>lwres_getaddrinfo()</function>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontwill return a a null-terminated string containing the canonical name
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntof the specified hostname in
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<constant>ai_canonname</constant>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntof the first
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>addrinfo</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntstructure returned.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntSetting the
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>AI_PASSIVE</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntbit indicates that the returned socket address structure is intended
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntfor used in a call to
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<citerefentry>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</citerefentry>.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan HuntIn this case, if the hostname argument is a
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>NULL</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntpointer, then the IP address portion of the socket
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntaddress structure will be set to
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>INADDR_ANY</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntfor an IPv4 address or
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<type>IN6ADDR_ANY_INIT</type>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntfor an IPv6 address.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<para>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontWhen
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<constant>ai_flags</constant>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontdoes not set the
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>AI_PASSIVE</type>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontbit, the returned socket address structure will be ready
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntfor use in a call to
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<citerefentry>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt<refentrytitle>connect</refentrytitle><manvolnum>2
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</manvolnum>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt</citerefentry>
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntfor a connection-oriented protocol or
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<citerefentry>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refentrytitle>connect</refentrytitle><manvolnum>2</manvolnum>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</citerefentry>,
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<citerefentry>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont<refentrytitle>sendto</refentrytitle><manvolnum>2</manvolnum>
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont</citerefentry>,
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupont
f89a9bcf1c02b9b350b8d29e47b48fdc0d334d2aFrancis Dupontor
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<citerefentry>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<refentrytitle>sendmsg</refentrytitle><manvolnum>2
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</manvolnum>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont</citerefentry>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontif a connectionless protocol was chosen.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis DupontThe IP address portion of the socket address structure will be
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontset to the loopback address if
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<parameter>hostname</parameter>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontis a
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>NULL</type>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontpointer and
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<type>AI_PASSIVE</type>
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontis not set in
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont<constant>ai_flags</constant>.
</para>
<para>
If
<constant>ai_flags</constant>
is set to
<type>AI_NUMERICHOST</type>
it indicates that
<parameter>hostname</parameter>
should be treated as a numeric string defining an IPv4 or IPv6 address
and no name resolution should be attempted.
</para>
</listitem>
</variablelist>
<para>
All other elements of the
<type>struct addrinfo</type>
passed via
<parameter>hints</parameter>
must be zero.
</para>
<para>
A
<parameter>hints</parameter>
of
<type>NULL</type>
is treated as if the caller provided a
<type>struct addrinfo</type>
initialized to zero with
<constant>ai_family</constant>set to
<constant>PF_UNSPEC</constant>.
</para>
<para>
After a successful call to
<function>lwres_getaddrinfo()</function>,
<parameter>*res</parameter>
is a pointer to a linked list of one or more
<type>addrinfo</type>
structures.
Each
<type>struct addrinfo</type>
in this list cn be processed by following
the
<constant>ai_next</constant>
pointer, until a
<type>NULL</type>
pointer is encountered.
The three members
<constant>ai_family</constant>,
<constant>ai_socktype</constant>,
and
<constant>ai_protocol</constant>
in each
returned
<type>addrinfo</type>
structure contain the corresponding arguments for a call to
<citerefentry>
<refentrytitle>socket</refentrytitle><manvolnum>2</manvolnum>
</citerefentry>.
For each
<type>addrinfo</type>
structure in the list, the
<constant>ai_addr</constant>
member points to a filled-in socket address structure of length
<constant>ai_addrlen</constant>.
</para>
<para>
All of the information returned by
<function>lwres_getaddrinfo()</function>
is dynamically allocated: the addrinfo structures, and the socket
address structures and canonical host name strings pointed to by the
<constant>addrinfo</constant>structures.
Memory allocated for the dynamically allocated structures created by
a successful call to
<function>lwres_getaddrinfo()</function>
is released by
<function>lwres_freeaddrinfo()</function>.
<parameter>ai</parameter>
is a pointer to a
<type>struct addrinfo</type>
created by a call to
<function>lwres_getaddrinfo()</function>.
</para>
</refsect1>
<refsect1>
<title>RETURN VALUES</title>
<para>
<function>lwres_getaddrinfo()</function>
returns zero on success or one of the error codes listed in
<citerefentry>
<refentrytitle>gai_strerror</refentrytitle><manvolnum>3
</manvolnum>
</citerefentry>
if an error occurs.
If both
<parameter>hostname</parameter>
and
<parameter>servname</parameter>
are
<type>NULL</type>
<function>lwres_getaddrinfo()</function>
returns
<errorcode>EAI_NONAME</errorcode>.
</para>
</refsect1>
<refsect1>
<title>SEE ALSO</title>
<para>
<citerefentry>
<refentrytitle>lwres</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_getaddrinfo</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_freeaddrinfo</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_gai_strerror</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>RFC2133</refentrytitle>
</citerefentry>,
<citerefentry>
<refentrytitle>getservbyname</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>connect</refentrytitle><manvolnum>2</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>sendto</refentrytitle><manvolnum>2</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>sendmsg</refentrytitle><manvolnum>2</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>socket</refentrytitle><manvolnum>2</manvolnum>
</citerefentry>.
</para>
</refsect1>
</refentry>