The code did not take into account that the return value of
WSAWaitForMultipleEvents() is the offset into the event array plus
WSA_WAIT_EVENT_0.
Based on a patch from arsh0r.
break;
}
- if(result >= event_count - event_offset) {
- return(false);
+ if(result < WSA_WAIT_EVENT_0 || result >= WSA_WAIT_EVENT_0 + event_count - event_offset) {
+ return false;
}
/* Look up io in the map by index. */
- event_index = result - event_offset;
+ event_index = result - WSA_WAIT_EVENT_0 + event_offset;
io_t *io = io_map[event_index];
if(io->fd == -1) {