]> 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:35:17 +0000 (23:35 +0000)
committerMark Andrews <marka@isc.org>
Wed, 30 Jun 2004 23:35:17 +0000 (23:35 +0000)
                        isc_socket_bind(). [RT #11742]

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

diff --git a/CHANGES b/CHANGES
index 3b38bc74296e44fba78240dd7f77bb7d44cdcb61..4d3a1cf68a5310b63b5f9e44c4047afddcc4c235 100644 (file)
--- 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
 
index 4c6734b0cb112ed92961ea7c5e5a84ae260f063b..ad9f4e6bcb693ae2d22f349181cbc0bc561d175d 100644 (file)
@@ -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 <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 5d2e8d976dde43d51c2fdd50ce22516ca1e2cf6d..af18e1117e34201062a23c3645848039448bd736 100644 (file)
@@ -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,