diff -ru c-ares-1.1.0-040330/ares.h c-ares-1.1.0-040330-p/ares.h
--- c-ares-1.1.0-040330/ares.h	Tue Mar 30 11:06:42 2004
+++ c-ares-1.1.0-040330-p/ares.h	Wed Mar 31 23:40:10 2004
@@ -136,5 +136,6 @@
 void ares_free_hostent(struct hostent *host);
 const char *ares_strerror(int code);
 void ares_free_errmem(char *mem);
+void ares_force_timeouts(ares_channel channel);
 
 #endif /* ARES__H */
diff -ru c-ares-1.1.0-040330/ares_process.c c-ares-1.1.0-040330-p/ares_process.c
--- c-ares-1.1.0-040330/ares_process.c	Fri Feb 27 14:21:47 2004
+++ c-ares-1.1.0-040330-p/ares_process.c	Wed Mar 31 23:39:57 2004
@@ -623,3 +623,26 @@
 	ares__close_sockets(&channel->servers[i]);
     }
 }
+
+
+/* quit and free all queries */
+void ares_force_timeouts(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]);
+    }
+}
+

