]> granicus.if.org Git - curl/commitdiff
- Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't
authorDaniel Stenberg <daniel@haxx.se>
Thu, 28 Jan 2010 22:03:48 +0000 (22:03 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 28 Jan 2010 22:03:48 +0000 (22:03 +0000)
  check for broken connections like ares_process() did. Based on that, I
  merged the two functions into a single generic one with two front-ends.

ares/CHANGES
ares/RELEASE-NOTES
ares/ares_process.c

index 8ad0b9d636712f6d123a7f2cf2ce409873d362fa..c3961c4c556b3ed05c45c02c54b5beead4714ebf 100644 (file)
@@ -1,5 +1,10 @@
   Changelog for the c-ares project
 
+* January 28, 2010 (Daniel Stenberg)
+- Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't
+  check for broken connections like ares_process() did. Based on that, I
+  merged the two functions into a single generic one with two front-ends.
+
 * December 29, 2009 (Yang Tse)
 - Laszlo Tamas Szabo adjusted Makefile.msvc compiler options so that where
   run-time error checks enabling compiler option /GZ was used it is replaced
index a444c2c18912df62b870ebe076c851c17441f0b9..120ac2908f65783381c42556c20e1936fb20b7d6 100644 (file)
@@ -8,9 +8,10 @@ Fixed:
 
  o closing of sockets on Windows systems
  o MSVC deprecated compiler options warnings
+ o ares_process_fd() didn't check broken connections
 
 Thanks go to these friendly people for their efforts and contributions:
 
- Ingmar Runge, Laszlo Tamas Szabo
+ Ingmar Runge, Laszlo Tamas Szabo, Yang Tse, Tommie Gannert
 
 Have fun!
index 4b5f1825141e61cf0ac62a11fecbd1e1a8844163..01036f5beabece6b99711fc265ffeadf20f38b2e 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$ */
 
 /* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2009 by Daniel Stenberg
+ * Copyright (C) 2004-2010 by Daniel Stenberg
  *
  * Permission to use, copy, modify, and distribute this
  * software and its documentation for any purpose and without
@@ -139,20 +139,30 @@ long ares__timeoffset(struct timeval *now,
 }
 
 
-/* Something interesting happened on the wire, or there was a timeout.
- * See what's up and respond accordingly.
+/*
+ * generic process function
  */
-void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
+static void processfds(ares_channel channel,
+                       fd_set *read_fds, ares_socket_t read_fd,
+                       fd_set *write_fds, ares_socket_t write_fd)
 {
   struct timeval now = ares__tvnow();
 
-  write_tcp_data(channel, write_fds, ARES_SOCKET_BAD, &now);
-  read_tcp_data(channel, read_fds, ARES_SOCKET_BAD, &now);
-  read_udp_packets(channel, read_fds, ARES_SOCKET_BAD, &now);
+  write_tcp_data(channel, write_fds, write_fd, &now);
+  read_tcp_data(channel, read_fds, read_fd, &now);
+  read_udp_packets(channel, read_fds, read_fd, &now);
   process_timeouts(channel, &now);
   process_broken_connections(channel, &now);
 }
 
+/* Something interesting happened on the wire, or there was a timeout.
+ * See what's up and respond accordingly.
+ */
+void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
+{
+  processfds(channel, read_fds, ARES_SOCKET_BAD, write_fds, ARES_SOCKET_BAD);
+}
+
 /* Something interesting happened on the wire, or there was a timeout.
  * See what's up and respond accordingly.
  */
@@ -161,12 +171,7 @@ void ares_process_fd(ares_channel channel,
                                                file descriptors */
                      ares_socket_t write_fd)
 {
-  struct timeval now = ares__tvnow();
-
-  write_tcp_data(channel, NULL, write_fd, &now);
-  read_tcp_data(channel, NULL, read_fd, &now);
-  read_udp_packets(channel, NULL, read_fd, &now);
-  process_timeouts(channel, &now);
+  processfds(channel, NULL, read_fd, NULL, write_fd);
 }
 
 
@@ -174,7 +179,8 @@ void ares_process_fd(ares_channel channel,
  * otherwise. This is mostly for HP-UX, which could return EAGAIN or
  * EWOULDBLOCK. See this man page
  *
- *      http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?manpage=/usr/share/man/man2.Z/send.2
+ * http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?
+ *     manpage=/usr/share/man/man2.Z/send.2
  */
 static int try_again(int errnum)
 {
@@ -802,8 +808,9 @@ void ares__send_query(ares_channel channel, struct query *query,
 }
 
 /*
- * setsocknonblock sets the given socket to either blocking or non-blocking mode
- * based on the 'nonblock' boolean argument. This function is highly portable.
+ * setsocknonblock sets the given socket to either blocking or non-blocking
+ * mode based on the 'nonblock' boolean argument. This function is highly
+ * portable.
  */
 static int setsocknonblock(ares_socket_t sockfd,    /* operate on this */
                     int nonblock   /* TRUE or FALSE */)
@@ -902,10 +909,10 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
 
 #ifdef TCP_NODELAY
   /*
-   * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not in
-   * configure_socket). In general, in DNS lookups we're pretty much interested
-   * in firing off a single request and then waiting for a reply, so batching
-   * isn't very interesting in general.
+   * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not
+   * in configure_socket). In general, in DNS lookups we're pretty much
+   * interested in firing off a single request and then waiting for a reply,
+   * so batching isn't very interesting in general.
    */
   opt = 1;
   if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY,