[socket] Fix bad parameter passed to select (#4390)
[mono.git] / mono / utils / mono-poll.c
old mode 100644 (file)
new mode 100755 (executable)
index 4bd3f37..d81b4eb
@@ -1,7 +1,25 @@
+#include <config.h>
+
+#ifdef HOST_WIN32
+/* For select */
+#include <winsock2.h>
+#endif
+
 #include "mono-poll.h"
 #include <errno.h>
 
-#ifdef HAVE_POLL
+#ifdef DISABLE_SOCKETS
+#include <glib.h>
+
+int
+mono_poll (mono_pollfd *ufds, unsigned int nfds, int timeout)
+{
+       g_assert_not_reached ();
+       return -1;
+}
+#else
+
+#if defined(HAVE_POLL) && !defined(__APPLE__)
 int
 mono_poll (mono_pollfd *ufds, unsigned int nfds, int timeout)
 {
@@ -36,13 +54,13 @@ mono_poll (mono_pollfd *ufds, unsigned int nfds, int timeout)
                if (fd < 0)
                        continue;
 
-#ifdef PLATFORM_WIN32
+#ifdef HOST_WIN32
                if (nexc >= FD_SETSIZE) {
                        ufds [i].revents = MONO_POLLNVAL;
                        return 1;
                }
 #else
-               if (fd > FD_SETSIZE) {
+               if (fd >= FD_SETSIZE) {
                        ufds [i].revents = MONO_POLLNVAL;
                        return 1;
                }
@@ -64,7 +82,7 @@ mono_poll (mono_pollfd *ufds, unsigned int nfds, int timeout)
 
        affected = select (maxfd + 1, &rfds, &wfds, &efds, tvptr);
        if (affected == -1) {
-#ifdef PLATFORM_WIN32
+#ifdef HOST_WIN32
                int error = WSAGetLastError ();
                switch (error) {
                case WSAEFAULT: errno = EFAULT; break;
@@ -114,3 +132,4 @@ mono_poll (mono_pollfd *ufds, unsigned int nfds, int timeout)
 
 #endif
 
+#endif /* #ifndef DISABLE_SOCKETS */