- // Get error number
- if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &errcode, &codesize) < 0)
- errcode = errno;
- eh->HandleEvent(EVENT_ERROR, errcode);
- continue;
- }
-
- if (events[index].revents & POLLIN)
- {
- SetEventMask(eh, eh->GetEventMask() & ~FD_READ_WILL_BLOCK);
- eh->HandleEvent(EVENT_READ);
- }
-
- if (events[index].revents & POLLOUT)
- {
- SetEventMask(eh, eh->GetEventMask() & ~FD_WRITE_WILL_BLOCK);
- eh->HandleEvent(EVENT_WRITE);
- }
+ // The vector could've been resized, reference can be invalid by now; don't use it
+ events[index].events = mask_to_poll(mask);
+ eh->HandleEvent(EVENT_WRITE);