]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1681. [bug] Only set SO_REUSEADDR when a port is specified in
authorMark Andrews <marka@isc.org>
Wed, 30 Jun 2004 23:34:55 +0000 (23:34 +0000)
committerMark Andrews <marka@isc.org>
Wed, 30 Jun 2004 23:34:55 +0000 (23:34 +0000)
                        isc_socket_bind(). [RT #11742]

CHANGES
lib/isc/unix/socket.c
lib/isc/win32/socket.c

diff --git a/CHANGES b/CHANGES
index 84534916d9685e5344b60617410d60ff8ea8f13e..4948ae599496d6e4728da7e014bfd8f606dbc770 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+1681.  [bug]           Only set SO_REUSEADDR when a port is specified in
+                       isc_socket_bind(). [RT #11742]
+
 1679.  [bug]           When there was a single nameserver with multiple
                        addresses for a zone not all addresses were tried.
                        [RT #11706]
index d36cdfaff61a487429b87a2b84211d83fef89e8f..34ed82a9e6fbc7d3f8bbcffd7124932a3a4c3f90 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.207.2.19.2.11 2004/04/19 03:05:22 marka Exp $ */
+/* $Id: socket.c,v 1.207.2.19.2.12 2004/06/30 23:34:54 marka Exp $ */
 
 #include <config.h>
 
@@ -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,
index 7dcd340275e9af5de296bd3671399d7ec783709c..fa7bfe3c80afb731382a3a68c0d5e62db830ef88 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.5.2.13.2.11 2004/06/18 01:15:32 marka Exp $ */
+/* $Id: socket.c,v 1.5.2.13.2.12 2004/06/30 23:34:55 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,