Copyright 1998 by the Massachusetts Institute of Technology.
SPDX-License-Identifier: MIT
#include <ares.h> typedef void (*ares_host_callback)(void *arg, int status, int timeouts, struct hostent *hostent) void ares_gethostbyaddr(ares_channel_t *channel, const void *addr, int addrlen, int family, ares_host_callback callback, void *arg)
The callback argument arg is copied from the ares_gethostbyaddr argument arg . The callback argument status indicates whether the query succeeded and, if not, how it failed. It may have any of the following values:
19 ARES_SUCCESS The host lookup completed successfully.
19 ARES_ENOTIMP The ares library does not know how to look up addresses of type family .
19 ARES_ENOTFOUND The address addr was not found.
19 ARES_ENOMEM Memory was exhausted.
19 ARES_ECANCELLED The query was cancelled.
19 ARES_EDESTRUCTION 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.
On successful completion of the query, the callback argument hostent points to a struct hostent containing the name of the host returned by the query. The callback need not and should not attempt to free the memory pointed to by hostent ; the ares library will free it when the callback returns. If the query did not complete successfully, hostent will be NULL .
When the associated callback is called, it is called with a channel lock so care must be taken to ensure any processing is minimal to prevent DNS channel stalls. The callback may be triggered from a different thread than the one which called ares_gethostbyaddr(3). For integrators running their own event loops and not using ARES_OPT_EVENT_THREAD, care needs to be taken to ensure any file descriptor lists are updated immediately within the eventloop when notified.