libmicrohttpd

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

commit 6767963266727522027e6afa351f84040ff22757
parent a3bfa8a2d6ec9d552326a1daa2fd68fd9bd43c6f
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Sat, 30 Jan 2016 15:57:42 +0000

Fix running select() on W32 with empty fdsets - W32 return error if no socket is marked in fdsets.

Diffstat:
MChangeLog | 3+++
Msrc/include/platform_interface.h | 7++++++-
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,6 @@ +Sat Jan 30 15:49:07 CET 2016 + Fix running select() with empty fdsets on W32. -EG + Mon Jan 25 13:45:50 CET 2016 Added check test for triggering select() on listen socket. -EG diff --git a/src/include/platform_interface.h b/src/include/platform_interface.h @@ -108,7 +108,12 @@ typedef int _MHD_socket_funcs_size; #if !defined(MHD_WINSOCK_SOCKETS) #define MHD_SYS_select_(n,r,w,e,t) select((n),(r),(w),(e),(t)) #else -#define MHD_SYS_select_(n,r,w,e,t) select((int)0,(r),(w),(e),(t)) +#define MHD_SYS_select_(n,r,w,e,t) \ + ( (!(r) || ((fd_set*)(r))->fd_count == 0) && \ + (!(w) || ((fd_set*)(w))->fd_count == 0) && \ + (!(e) || ((fd_set*)(e))->fd_count == 0) ) ? \ + ( (!(t)) ? (Sleep((t)->tv_sec * 1000 + (t)->tv_usec / 1000), 0) : 0 ) : \ + (select((int)0,(r),(w),(e),(t))) #endif #if defined(HAVE_POLL)