ARES_PROCESS(3) Introduction to Library Functions ARES_PROCESS(3)
NAME
ares_process_fds, ares_process_fd, ares_process - Process events for
name resolution
SYNOPSIS
#include <ares.h>
/*! Events used by ares_fd_events_t */
typedef enum {
ARES_FD_EVENT_NONE = 0, /*!< No events */
ARES_FD_EVENT_READ = 1 << 0, /*!< Read event (including disconnect/error) */
ARES_FD_EVENT_WRITE = 1 << 1 /*!< Write event */
} ares_fd_eventflag_t;
/*! Type holding a file descriptor and mask of events, used by
* ares_process_fds() */
typedef struct {
ares_socket_t fd; /*!< File descriptor */
unsigned int events; /*!< Mask of ares_fd_event_t */
} ares_fd_events_t;
typedef enum {
ARES_PROCESS_FLAG_NONE = 0,
ARES_PROCESS_FLAG_SKIP_NON_FD = 1 << 0
} ares_process_flag_t;
ares_status_t ares_process_fds(ares_channel_t *
channel,
const ares_fd_events_t *
events,
size_t
nevents,
unsigned int
flags)
void ares_process_fd(ares_channel_t *
channel,
ares_socket_t
read_fd,
ares_socket_t
write_fd)
void ares_process(ares_channel_t *
channel,
fd_set *
read_fds,
fd_set *
write_fds)
DESCRIPTION
These functions must be used by integrators choosing not to use the
EventThread enabled via
ARES_OPT_EVENT_THREAD passed to
ares_init_options. This assumes integrators already have their own
event loop handling event notifications for various file descriptors
and wish to do the same with their integration with c-ares.
The
ares_process_fds(3) function handles input/output events on file
descriptors and timeouts associated with queries pending on the
channel identified by
channel. The file descriptors to be processed
are passed in an array of
ares_fd_events_t data structures in the
fd member, and events are a bitwise mask of
ares_fd_eventflag_t in the
event member. This function can also be used to process timeouts by
passing NULL to the
events member with
nevents value of 0. Flags may
also be specified in the
flags field and are defined in
ares_process_flag_t.
ARES_PROCESS_FLAG_SKIP_NON_FD can be specified to specifically skip
any processing unrelated to the file descriptor events passed in,
examples include timeout processing and cleanup handling. This is
useful if an integrator knows they will be sending multiple
ares_process_fds(3) requests and wants to skip that extra processing.
However, the integrator must send the final request with the flag so
that timeout and other processing gets performed before their event
loop waits on additional events.
It is allowable to use an
ares_fd_events_t with
events member of
value
ARES_FD_EVENT_NONE (0) if there are no events for a given file
descriptor if an integrator wishes to simply maintain an array with
all possible file descriptors and update readiness via the
event member.
This function will return
ARES_ENOMEM in out of memory conditions,
otherwise will return
ARES_SUCCESS.
This function is recommended over
ares_process_fd(3) since it can
handle processing of multiple file descriptors at once, thus skipping
repeating additional logic such as timeout processing which would be
required if calling
ares_process_fd(3) for multiple file descriptors
notified at the same time.
This function is typically used with the
ARES_OPT_SOCK_STATE_CB option.
ares_timeout(3) should be used to retrieve the desired timeout, and
when the timeout expires, the integrator must call
ares_process_fds(3) with a NULL
events array. (or
ares_process_fd(3) with both sockets set to
ARES_SOCKET_BAD). 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
ares_process_fds(3) or
ares_process_fd(3).
The
ares_process_fd(3) function is the same as
ares_process_fds(3) except can only process a single read and write file descriptor at a
time. New integrators should use
ares_process_fds(3) if possible.
The
ares_process(3) function works in the same manner, except it
works on
fd_sets as is used by
select(3) and retrieved by
ares_fds(3). This method is deprecated and should not be used in
modern applications due to known limitations to the
select(3) implementation.
AVAILABILITY
ares_process_fds(3) was introduced in c-ares 1.34.0.
SEE ALSO
ares_fds(3),
ares_timeout(3),
ares_init_options(3) with
ARES_OPT_EVENT_THREAD or
ARES_OPT_SOCK_STATE_CB 25 July 1998 ARES_PROCESS(3)