ares_send - Initiate a DNS query
typedef void (*ares_callback)(void *arg, int status,
int timeouts, unsigned char *abuf, int alen)
void ares_send(ares_channel channel, const unsigned char *qbuf,
int qlen, ares_callback callback, void *arg)
function initiates a DNS query on the name service channel
identified by channel
. The parameters qbuf
the DNS query, which should already have been formatted according to the DNS
protocol. When the query is complete or has failed, the ares library will
. Completion or failure of the query may happen
immediately, or may happen during a later call to ares_process
The callback argument arg
is copied from the ares_send
. The callback argument status
indicates whether the query
succeeded and, if not, how it failed. It may have any of the following values:
- The query completed.
- The query buffer was poorly formed (was not long enough for a DNS header
or was too long for TCP transmission).
- No name servers responded within the timeout period.
- No name servers could be contacted.
- Memory was exhausted.
- The query was cancelled.
- The name service channel channel is being destroyed; the query will
not be completed.
The callback argument timeouts
reports how many times a query timed out
during the execution of the given request.
If the query completed, the callback argument abuf
points to a result
buffer of length alen
. If the query did not complete, abuf
be NULL and alen
will be 0.
Unless the flag ARES_FLAG_NOCHECKRESP
was set at channel initialization
will normally ignore responses whose questions do not
match the questions in qbuf
, as well as responses with reply codes of
, and REFUSED
. Unlike other query
functions in the ares library, however, ares_send
does not inspect the
header of the reply packet to determine the error status, so a callback status
does not reflect as much about the response as for
other query functions.
Greg Hudson, MIT Information Systems
Copyright 1998 by the Massachusetts Institute of Technology.