libmicrohttpd

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

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:
Msrc/include/platform.h | 37++++++++++++++++++++++++++++++++++---
Msrc/microhttpd/daemon.c | 11++---------
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); } /**