@ -4,61 +4,44 @@
. \"
.TH ARES_PROCESS 3 "25 July 1998"
.SH NAME
ares_process \- Process events for name resolution
ares_process_fd, ares_process \- Process events for name resolution
.SH SYNOPSIS
.nf
#include <ares.h>
void ares_process_fd(ares_channel_t *\fI channel\fP ,
ares_socket_t \fI read_fd\fP ,
ares_socket_t \fI write_fd\fP )
void ares_process(ares_channel_t *\fI channel\fP ,
fd_set *\fI read_fds\fP ,
fd_set *\fI write_fds\fP )
void ares_process_fd(ares_channel_t *\fI channel\fP ,
ares_socket_t \fI read_fd\fP ,
ares_socket_t \fI write_fd\fP )
.fi
.SH DESCRIPTION
The \fB ares_process(3)\fP function handles input/output events and timeouts
The \fB ares_process_fd(3)\fP function handles input/output events and timeouts
associated with queries pending on the name service channel identified by
.IR channel .
The file descriptor sets pointed to by \fI read_fds\fP and \fI write_fds\fP
should have file descriptors set in them according to whether the file
descriptors specified by \fI ares_fds(3)\fP are ready for reading and writing.
(The easiest way to determine this information is to invoke \fB select(3)\fP
with a timeout no greater than the timeout given by \fI ares_timeout(3)\fP ).
\fI channel\fP . The file descriptor passed in \fI read_fd\fP and \fI write_fd\fP
indicate if the file descriptor has been notified of a read event or write
event, respectively. If a notification has not occurred, use
\fI ARES_SOCKET_BAD\fP .
The \fB ares_process(3)\fP function will invoke callbacks for pending queries
if they complete successfully or fail.
This function is typically used with the \fI ARES_OPT_SOCK_STATE_CB\fP option.
\fB ares_process_fd(3)\fP works the same way but acts and operates only on the
specific file descriptors (sockets) you pass in to the function. Use
ARES_SOCKET_BAD for "no action". This function is provided to allow users of
c-ares to avoid \fI select(3)\fP in their applications and within c-ares.
\fB ares_timeout(3)\fP should be used to retrieve the desired timeout, and when
the timeout expires, the integrator must call \fB ares_process_fd(3)\fP with
both sockets set to \fI ARES_SOCKET_BAD\fP . There is no need to do this if
events are also delivered for any file descriptors as timeout processing
will automatically be handled by any call to \fB ares_process_fd(3)\fP .
To only process possible timeout conditions without a socket event occurring,
one may pass NULL as the values for both \fI read_fds\fP and \fI write_fds\fP for
\fB ares_process(3)\fP , or ARES_SOCKET_BAD for both \fI read_fd\fP and
\fI write_fd\fP for \fB ares_process_fd(3)\fP .
.SH EXAMPLE
The following code fragment waits for all pending queries on a channel
to complete:
The \fB ares_process(3)\fP function works in the same manner, except it works
on \fI fd_sets\fP as is used by \fB select(3)\fP and retrieved by
\fB ares_fds(3)\fP . This method is deprecated and should not be used in modern
applications due to known limitations to the \fB select(3)\fP implementation.
.nf
int nfds, count;
fd_set readers, writers;
struct timeval tv, *tvp;
while (1) {
FD_ZERO(&readers);
FD_ZERO(&writers);
nfds = ares_fds(channel, &readers, &writers);
if (nfds == 0)
break;
tvp = ares_timeout(channel, NULL, &tv);
count = select(nfds, &readers, &writers, NULL, tvp);
ares_process(channel, &readers, &writers);
}
.fi
.SH SEE ALSO
.BR ares_fds (3),
.BR ares_timeout (3)
.BR ares_timeout (3),
.BR ares_init_options (3)
with \fI ARES_OPT_EVENT_THREAD\fP or \fI ARES_OPT_SOCK_STATE_CB\fP