From: Mark Andrews Date: Wed, 30 Jun 2004 23:35:17 +0000 (+0000) Subject: 1681. [bug] Only set SO_REUSEADDR when a port is specified in X-Git-Tag: v9.2.4rc7~22^2~10 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=9aa7706900e2451fcd6e44ffe4a45b042ec34cf3;p=thirdparty%2Fbind9.git 1681. [bug] Only set SO_REUSEADDR when a port is specified in isc_socket_bind(). [RT #11742] --- diff --git a/CHANGES b/CHANGES index 3b38bc74296..4d3a1cf68a5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ 1682. [placeholder] rt5066a -1681. [placeholder] rt11742 +1681. [bug] Only set SO_REUSEADDR when a port is specified in + isc_socket_bind(). [RT #11742] 1680. [placeholder] rt11697 diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 4c6734b0cb1..ad9f4e6bcb6 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.239 2004/04/19 02:53:05 marka Exp $ */ +/* $Id: socket.c,v 1.240 2004/06/30 23:35:16 marka Exp $ */ #include @@ -2859,8 +2859,12 @@ isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) { UNLOCK(&sock->lock); return (ISC_R_FAMILYMISMATCH); } - if (setsockopt(sock->fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, - sizeof(on)) < 0) { + /* + * Only set SO_REUSEADDR when we want a specific port. + */ + if (isc_sockaddr_getport(sockaddr) != (in_port_t)0 && + setsockopt(sock->fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, + sizeof(on)) < 0) { UNEXPECTED_ERROR(__FILE__, __LINE__, "setsockopt(%d) %s", sock->fd, isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, diff --git a/lib/isc/win32/socket.c b/lib/isc/win32/socket.c index 5d2e8d976dd..af18e1117e3 100644 --- a/lib/isc/win32/socket.c +++ b/lib/isc/win32/socket.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: socket.c,v 1.33 2004/06/18 01:14:59 marka Exp $ */ +/* $Id: socket.c,v 1.34 2004/06/30 23:35:17 marka Exp $ */ /* This code has been rewritten to take advantage of Windows Sockets * I/O Completion Ports and Events. I/O Completion Ports is ONLY @@ -3225,7 +3225,11 @@ isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) { UNLOCK(&sock->lock); return (ISC_R_FAMILYMISMATCH); } - if (setsockopt(sock->fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, + /* + * Only set SO_REUSEADDR when we want a specific port. + */ + if (isc_sockaddr_getport(sockaddr) != (in_port_t)0 && + setsockopt(sock->fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)) < 0) { UNEXPECTED_ERROR(__FILE__, __LINE__, "setsockopt(%d) %s", sock->fd,