libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit dd902f337ba25c4d0093e4a89bc4edf1fb897611
parent 5534659f202f3ba5fe5b9155fc742e63518aefc9
Author: Christian Grothoff <christian@grothoff.org>
Date:   Wed, 22 Jan 2014 08:47:48 +0000

Luke-Jr wrote:

MHD_USE_DUAL_STACK in libmicrohttpd currently just *inhibits setting* the 
IPV6_V6ONLY socket option, but per Microsoft's documentation 
http://msdn.microsoft.com/en-us/library/windows/desktop/bb513665(v=vs.85).aspx
the default on Windows is that this is enabled, thus MHD_USE_DUAL_STACK will 
not work (since it leaves the default). libmicrohttpd should probably just 
unconditionally set IPV6_V6ONLY to the desired value when the option is 
available.

diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 0a33b77..3cbf28e 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -3493,8 +3493,7 @@ MHD_start_daemon_va (unsigned int flags,
 	}
       daemon->socket_fd = socket_fd;
 
-      if ( (0 != (flags & MHD_USE_IPv6)) &&
-	   (MHD_USE_DUAL_STACK != (flags & MHD_USE_DUAL_STACK)) )
+      if (0 != (flags & MHD_USE_IPv6))
 	{
 #ifdef IPPROTO_IPV6
 #ifdef IPV6_V6ONLY
@@ -3503,10 +3502,11 @@ MHD_start_daemon_va (unsigned int flags,
 	     and may also be missing on older POSIX systems; good luck if you have 
any of those,
 	     your IPv6 socket may then also bind against IPv4 anyway... */
 #ifndef WINDOWS
-	  const int on = 1;
+	  const int
 #else
-	  const char on = 1;
+	  const char
 #endif
+		 on = (MHD_USE_DUAL_STACK != (flags & MHD_USE_DUAL_STACK));
 	  if ( (0 > SETSOCKOPT (socket_fd,
 				IPPROTO_IPV6, IPV6_V6ONLY,
 				&on, sizeof (on))) &&





Diffstat:
MAUTHORS | 3++-
MChangeLog | 8++++++++
Msrc/microhttpd/daemon.c | 8++++----
3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/AUTHORS b/AUTHORS @@ -22,7 +22,7 @@ Matthew Moore Colin Caughie <c.caughie@indigovision.com> David Carvalho <andaris@gmail.com> David Reiss <dreiss@facebook.com> -Matt Holiday +Matt Holiday Michael Cronenworth <mike@cchtml.com> Mika Raento <mikie@iki.fi> Mike Crowe <mac@mcrowe.com> @@ -45,6 +45,7 @@ Jan Janak <jan@janakj.org> Matthew Mundell <matthew.mundell@greenbone.net> Scott Goldman <scottjg@github.com> Jared Cantwell +Luke-Jr <luke@dashjr.org> Documentation contributions also came from: Marco Maggi <marco.maggi-ipsu@poste.it> diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,11 @@ +Wed Jan 22 09:44:33 CET 2014 + MHD_USE_DUAL_STACK in libmicrohttpd currently just *inhibits + setting* the IPV6_V6ONLY socket option, but per Microsoft's + documentation the default on Windows is that this is enabled, thus + MHD_USE_DUAL_STACK will not work (since it leaves the + default). libmicrohttpd should probably just unconditionally set + IPV6_V6ONLY to the desired value when the option is available. -LJ + Wed Jan 1 21:38:18 CET 2014 Allow Keep-Alive with HTTP 1.0 (if explicitly requested), and automatically set "Connection: Keep-Alive" in response diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c @@ -3493,8 +3493,7 @@ MHD_start_daemon_va (unsigned int flags, } daemon->socket_fd = socket_fd; - if ( (0 != (flags & MHD_USE_IPv6)) && - (MHD_USE_DUAL_STACK != (flags & MHD_USE_DUAL_STACK)) ) + if (0 != (flags & MHD_USE_IPv6)) { #ifdef IPPROTO_IPV6 #ifdef IPV6_V6ONLY @@ -3503,10 +3502,11 @@ MHD_start_daemon_va (unsigned int flags, and may also be missing on older POSIX systems; good luck if you have any of those, your IPv6 socket may then also bind against IPv4 anyway... */ #ifndef WINDOWS - const int on = 1; + const int #else - const char on = 1; + const char #endif + on = (MHD_USE_DUAL_STACK != (flags & MHD_USE_DUAL_STACK)); if ( (0 > SETSOCKOPT (socket_fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof (on))) &&