#include "mono-poll.h"
+#include <errno.h>
-#ifdef HAVE_POLL
+#if defined(HAVE_POLL) && !defined(__APPLE__)
int
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;
}
affected = select (maxfd + 1, &rfds, &wfds, &efds, tvptr);
- if (affected == -1) /* EBADF should be translated to POLLNVAL */
+ if (affected == -1) {
+#ifdef HOST_WIN32
+ int error = WSAGetLastError ();
+ switch (error) {
+ case WSAEFAULT: errno = EFAULT; break;
+ case WSAEINVAL: errno = EINVAL; break;
+ case WSAEINTR: errno = EINTR; break;
+ /* case WSAEINPROGRESS: errno = EINPROGRESS; break; */
+ case WSAEINPROGRESS: errno = EINTR; break;
+ case WSAENOTSOCK: errno = EBADF; break;
+#ifdef ENOSR
+ case WSAENETDOWN: errno = ENOSR; break;
+#endif
+ default: errno = 0;
+ }
+#endif
+
return -1;
+ }
count = 0;
for (i = 0; i < nfds && affected > 0; i++) {