]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2846. [bug] EOF on unix domain sockets was not being handled
authorMark Andrews <marka@isc.org>
Sun, 31 Jan 2010 23:21:58 +0000 (23:21 +0000)
committerMark Andrews <marka@isc.org>
Sun, 31 Jan 2010 23:21:58 +0000 (23:21 +0000)
                        correctly. [RT #20731]

CHANGES
lib/isc/unix/socket.c

diff --git a/CHANGES b/CHANGES
index e7d722eb36c169e01b16875460b1c5a540e9b8af..cdcee2fe166dc897e23664a95c736c03767360d7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,7 @@
 2844.  [doc]           notify-delay default in ARM was wrong.  It should have
+2846.  [bug]           EOF on unix domain sockets was not being handled
+                       correctly. [RT #20731]
+
                        been five (5) seconds.
 
        --- 9.6.2rc1 released ---
index cb57f6e47eb1f244549b9fa213a8e69d2a681930..d1ed8e73aa35e33b468a1d1a5f9b61fca111cab3 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.308.12.10 2009/09/07 02:11:57 marka Exp $ */
+/* $Id: socket.c,v 1.308.12.11 2010/01/31 23:21:58 marka Exp $ */
 
 /*! \file */
 
@@ -1520,12 +1520,22 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
        }
 
        /*
-        * On TCP, zero length reads indicate EOF, while on
-        * UDP, zero length reads are perfectly valid, although
-        * strange.
+        * On TCP and UNIX sockets, zero length reads indicate EOF,
+        * while on UDP sockets, zero length reads are perfectly valid,
+        * although strange.
         */
-       if ((sock->type == isc_sockettype_tcp) && (cc == 0))
-               return (DOIO_EOF);
+       switch (sock->type) {
+       case isc_sockettype_tcp:
+       case isc_sockettype_unix:
+               if (cc == 0)
+                       return (DOIO_EOF);
+               break;
+       case isc_sockettype_udp:
+               break;
+       case isc_sockettype_fdwatch:
+       default:
+               INSIST(0);
+       }
 
        if (sock->type == isc_sockettype_udp) {
                dev->address.length = msghdr.msg_namelen;