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:
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)