Remove redundant -no-undefined (it's part of mandatory MHD_LIB_LDFLAGS
now)
Remove --export-all-symbols for W32 (visibility is used instead)
Add -fvisibility=hidden configure check (shamelessly borrowed from GTK)
Remove unused -export-symbols-regex check
Define _MHD_EXTERN to "extern" if it's undefined (this is what clients
get)
Mark all public functions with _MHD_EXTERN
Remove HIDDEN_SYMBOL definition
Don't mark hidden functions with HIDDEN_SYMBOL (everything that is not
explicitly public is hidden by default now)
Change constructor macros a bit to apply _MHD_EXTERN to them cleanly
Use HIDDEN_VISIBILITY_CFLAGS when compiling libraries
Remove EXPORT.sym files, don't mention them in EXTRA_DIST, don't use
them to define a list of exported functions
Remove redundant -no-undefined, make sure only the one that gets into
Makefiles directly remains, remove -Wl prefix from it
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))) &&
before feeding it to the preprocessor, trying all possible points where data
can be split. Prior to r30427 this test would have crashed only if data is
split at the very beginning (< 11). After r30427 this test crashes every time
the data is split somewhere around the boundary.
At least that is the case on W32.