Subject: Possible bug in ares_process_fd()

Possible bug in ares_process_fd()

From: Tommie Gannert <tommie_at_spotify.com>
Date: Wed, 27 Jan 2010 17:13:05 +0100

Hi!

I have an issue with TCP sockets in c-ares sometimes causing my epoll_wait()
to return immediately with a readable/writable socket.

After some debugging, I think this is due to the is_broken member being set
to non-zero, causing read_tcp_data() and write_tcp_data() to return early.

It seems the ares_process_fd() should have a call to process_broken_connections()
to actually close broken connections, just like ares_process() does.

--
Tommie
Index: ares_process.c
===================================================================
--- ares_process.c      (revision 62164)
+++ ares_process.c      (arbetskopia)
@@ -167,6 +167,7 @@
   read_tcp_data(channel, NULL, read_fd, &now);
   read_udp_packets(channel, NULL, read_fd, &now);
   process_timeouts(channel, &now);
+  process_broken_connections(channel, &now);
 }

Received on 2010-01-27