+ ret = 0;
+ break;
+ default:
+ for (unsigned i = 0; i < nfds; i++)
+ {
+ WSANETWORKEVENTS events;
+ if (WSAEnumNetworkEvents (fds[i].fd, phEvents[i], &events))
+ {
+ fds[i].revents |= POLLNVAL;
+ ret = -1;
+ continue;
+ }
+ if (events.lNetworkEvents & FD_CLOSE)
+ fds[i].revents |= POLLHUP | (fds[i].events & POLLIN);
+ if (events.lNetworkEvents & FD_ACCEPT)
+ fds[i].revents |= POLLIN;
+ if (events.lNetworkEvents & FD_OOB)
+ fds[i].revents |= POLLPRI;
+ if (events.lNetworkEvents & FD_READ)
+ fds[i].revents |= POLLIN;
+ if (events.lNetworkEvents & FD_WRITE)
+ {
+ fds[i].revents |= POLLOUT;
+ if (events.iErrorCode[FD_WRITE_BIT])
+ fds[i].revents |= POLLERR;
+ }
+ if (fds[i].events)
+ n++;
+ }
+ if (ret == 0)
+ ret = n;