commit 6cf9fb3719c5d5486ec966807fa6ad6d3c10ef7a
parent 95d9c85bab32632a497fdc7394e357fc9c5690f3
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date: Mon, 7 Dec 2015 20:51:11 +0000
Handle redefined FD_SETSIZE and really redefine FD_SETSIZE for W32
Diffstat:
2 files changed, 36 insertions(+), 12 deletions(-)
diff --git a/src/include/platform.h b/src/include/platform.h
@@ -57,6 +57,32 @@
#endif
#endif /* BUILDING_MHD_LIB */
+
+#ifdef FD_SETSIZE
+/* FD_SETSIZE defined in command line or in MHD_config.h */
+/* Some platforms (FreeBSD, Solaris, W32) allow to override
+ default FD_SETSIZE by defining it before including
+ headers. */
+#if defined(_WIN32) && !defined(__CYGWIN__)
+/* Default FD_SETSIZE value for WinSock */
+#define MHD_SYS_DEFAULT_FD_SETSIZE 64
+#elif defined(__sun) && defined(_LP64)
+/* Default FD_SETSIZE value for 64bit Solaris since version 7
+ and SunOS since version 2.7 */
+#define MHD_SYS_DEFAULT_FD_SETSIZE 65536
+#else /* all other platforms */
+/* Default FD_SETSIZE value for most platforms */
+#define MHD_SYS_DEFAULT_FD_SETSIZE 1024
+#endif /* all other platforms */
+#elif defined(_WIN32) && !defined(__CYGWIN__)
+/* Platform with WinSock and without overridden FD_SETSIZE */
+#define FD_SETSIZE 2048 /* Override default small value */
+#define MHD_SYS_DEFAULT_FD_SETSIZE 64
+#else
+/* Use system default value */
+#define MHD_SYS_DEFAULT_FD_SETSIZE FD_SETSIZE
+#endif /* FD_SETSIZE */
+
#define _XOPEN_SOURCE_EXTENDED 1
#if OS390
#define _OPEN_THREADS
@@ -154,6 +180,10 @@
#include <arpa/inet.h>
#endif
+#if defined(__CYGWIN__) && !defined(_SYS_TYPES_FD_SET)
+/* Do not define __USE_W32_SOCKETS under Cygwin! */
+#error Cygwin with winsock fd_set is not supported
+#endif
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <ws2tcpip.h>
@@ -175,20 +205,21 @@
#define _SSIZE_T_DEFINED
typedef intptr_t ssize_t;
#endif /* !_SSIZE_T_DEFINED */
+
#ifndef MHD_SOCKET_DEFINED
/**
* MHD_socket is type for socket FDs
*/
-#if !defined(_WIN32) || defined(_SYS_TYPES_FD_SET)
+#if !defined(_WIN32) || defined(__CYGWIN__)
#define MHD_POSIX_SOCKETS 1
typedef int MHD_socket;
#define MHD_INVALID_SOCKET (-1)
-#else /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */
+#else /* defined(_WIN32) && !defined(__CYGWIN__) */
#define MHD_WINSOCK_SOCKETS 1
#include <winsock2.h>
typedef SOCKET MHD_socket;
#define MHD_INVALID_SOCKET (INVALID_SOCKET)
-#endif /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */
+#endif /* defined(_WIN32) && !defined(__CYGWIN__) */
#define MHD_SOCKET_DEFINED 1
#endif /* MHD_SOCKET_DEFINED */
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
@@ -24,13 +24,6 @@
* @author Daniel Pittman
* @author Christian Grothoff
*/
-#if defined(MHD_WINSOCK_SOCKETS)
-/* override small default value */
-#define FD_SETSIZE 1024
-#define MHD_DEFAULT_FD_SETSIZE 64
-#else
-#define MHD_DEFAULT_FD_SETSIZE FD_SETSIZE
-#endif
#include "platform.h"
#include "internal.h"
#include "response.h"
@@ -75,7 +68,7 @@
* Default connection limit.
*/
#ifndef MHD_WINSOCK_SOCKETS
-#define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE - 4
+#define MHD_MAX_CONNECTIONS_DEFAULT (FD_SETSIZE - 4)
#else
#define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE
#endif
@@ -684,7 +677,7 @@ MHD_get_fdset (struct MHD_Daemon *daemon,
{
return MHD_get_fdset2(daemon, read_fd_set,
write_fd_set, except_fd_set,
- max_fd, MHD_DEFAULT_FD_SETSIZE);
+ max_fd, MHD_SYS_DEFAULT_FD_SETSIZE);
}
/**