From b4d6057cf046f68ca458744e70190574a60798e7 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Sun, 31 Jan 2010 23:21:58 +0000 Subject: [PATCH] 2846. [bug] EOF on unix domain sockets was not being handled correctly. [RT #20731] --- CHANGES | 3 +++ lib/isc/unix/socket.c | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index e7d722eb36c..cdcee2fe166 100644 --- 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 --- diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index cb57f6e47eb..d1ed8e73aa3 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -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; -- 2.47.3