+ Changelog for the c-ares project
+
+* April 1, 2004
+- Dirk Manske provided a new function that is now named ares_cancel(). It is
+ used to cancel/cleanup a resolve/request made using ares functions on the
+ given ares channel. It does not destroy/kill the ares channel itself.
+
+- Dominick Meglio cleaned up the formatting in several man pages.
+
* March 30, 2004
- Dominick Meglio's new ares_expand_string. A helper function when decoding
incoming DNS packages.
- Daniel Stenberg adjusted the windows port
- liren at vivisimo.com made the initial windows port
+
+* Imported the sources from ares 1.1.1
ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
ares_send.o ares_strerror.o ares_timeout.o ares_version.o \
- ares_expand_string.o
+ ares_expand_string.o ares_cancel.o
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
- ares_version.3
-
+ ares_version.3 ares_cancel.3
$(LIB): ${OBJS}
ar cru $@ ${OBJS}
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
int optmask);
void ares_destroy(ares_channel channel);
-
+void ares_cancel(ares_channel channel);
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
ares_callback callback, void *arg);
void ares_query(ares_channel channel, const char *name, int dnsclass,
--- /dev/null
+.\" $Id$
+.\"
+.\" Copyright 1998 by the Massachusetts Institute of Technology.
+.\"
+.\" Permission to use, copy, modify, and distribute this
+.\" software and its documentation for any purpose and without
+.\" fee is hereby granted, provided that the above copyright
+.\" notice appear in all copies and that both that copyright
+.\" notice and this permission notice appear in supporting
+.\" documentation, and that the name of M.I.T. not be used in
+.\" advertising or publicity pertaining to distribution of the
+.\" software without specific, written prior permission.
+.\" M.I.T. makes no representations about the suitability of
+.\" this software for any purpose. It is provided "as is"
+.\" without express or implied warranty.
+.\"
+.TH ARES_CANCEL 3 "31 March 2004"
+.SH NAME
+ares_cancel \- Cancel a resolve
+.SH SYNOPSIS
+.nf
+.B #include <ares.h>
+.PP
+.B int ares_cancel(ares_channel \fIchannel\fP)
+.fi
+.SH DESCRIPTION
+The \fBares_cancel\fP function cancels all lookups/requests made on the the
+name service channel identified by \fIchannel\fP. \fBares_cancel\fP invokes
+the callbacks for each pending query on the channel, passing a status of
+.BR ARES_ETIMEOUT .
+These calls give the callbacks a chance to clean up any state which
+might have been stored in their arguments.
+.SH SEE ALSO
+.BR ares_init (3)
+.BR ares_destroy (3)
+.SH AUTHOR
+Dirk Manske
--- /dev/null
+/* Copyright 1998 by the Massachusetts Institute of Technology.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in
+ * advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ */
+
+#include <stdlib.h>
+#include "ares.h"
+#include "ares_private.h"
+
+/*
+ * ares_cancel() cancels a ongoing request/resolve that might be going on on
+ * the given channel. It does NOT kill the channel, use ares_destroy() for
+ * that.
+ */
+void ares_cancel(ares_channel channel)
+{
+ struct query *query, *next;
+ int i;
+
+ for (query = channel->queries; query; query = next)
+ {
+ next = query->next;
+ query->callback(query->arg, ARES_ETIMEOUT, NULL, 0);
+ free(query->tcpbuf);
+ free(query->skip_server);
+ free(query);
+ }
+ channel->queries = NULL;
+ if (!(channel->flags & ARES_FLAG_STAYOPEN))
+ {
+ for (i = 0; i < channel->nservers; i++)
+ ares__close_sockets(&channel->servers[i]);
+ }
+}