ne_addr_resolve, ne_addr_result, ne_addr_first, ne_addr_next, ne_addr_error, ne_addr_destroy — functions to resolve hostnames to addresses
#include <ne_socket.h>
ne_sock_addr *ne_addr_resolve( | const char *hostname, |
int flags) ; |
int ne_addr_result( | const ne_sock_addr *addr) ; |
const ne_inet_addr *ne_addr_first( | ne_sock_addr *addr) ; |
const ne_inet_addr *ne_addr_next( | ne_sock_addr *addr) ; |
char *ne_addr_error( | const ne_sock_addr *addr, |
char *buffer, | |
size_t bufsiz) ; |
void ne_addr_destroy( | ne_sock_addr *addr) ; |
The ne_addr_resolve
function resolves
the given hostname
, returning an
ne_sock_addr object representing the address (or
addresses) associated with the hostname. The
flags
parameter is currently unused, and
must be passed as 0.
The hostname
passed to
ne_addr_resolve
can be a DNS hostname
(e.g. "www.example.com"
) or an IPv4 dotted quad
(e.g. "192.0.34.72"
); or, on systems which
support IPv6, an IPv6 hex address, which may be enclosed in
brackets, e.g. "[::1]"
.
To determine whether the hostname was successfully resolved,
the ne_addr_result
function is used, which
returns non-zero if an error occurred. If an error did occur, the
ne_addr_error
function can be used, which
will copy the error string into a given
buffer
(of size
bufsiz
).
The functions ne_addr_first
and
ne_addr_next
are used to retrieve the
Internet addresses associated with an address object which has
been successfully resolved. ne_addr_first
returns the first address; ne_addr_next
returns the next address after the most recent call to
ne_addr_next
or
ne_addr_first
, or NULL
if there are no more
addresses. The ne_inet_addr pointer returned by
these functions can be passed to
ne_sock_connect
to connect a socket.
After the address object has been used, it should be
destroyed using ne_addr_destroy
.
ne_addr_resolve
returns a pointer to an
address object, and never NULL
.
ne_addr_error
returns the
buffer
parameter .
The code below prints out the set of addresses associated
with the hostname www.google.com
.
ne_sock_addr *addr; char buf[256]; addr = ne_addr_resolve("www.google.com", 0); if (ne_addr_result(addr)) { printf("Could not resolve www.google.com: %s\n", ne_addr_error(addr, buf, sizeof buf)); } else { const ne_inet_addr *ia; printf("www.google.com:"); for (ia = ne_addr_first(addr); ia != NULL; ia = ne_addr_next(addr)) { printf(" %s", ne_iaddr_print(ia, buf, sizeof buf)); } putchar('\n'); } ne_addr_destroy(addr);