- if (events[index].revents & POLLHUP)
- {
- if (ref[index])
- ref[index]->HandleEvent(EVENT_ERROR, 0);
- continue;
- }
-
- if (events[index].revents & POLLERR)
- {
- // Get fd
- int fd = events[index].fd;
-
- // Get error number
- if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &errcode, &codesize) < 0)
- errcode = errno;
- if (ref[index])
- ref[index]->HandleEvent(EVENT_ERROR, errcode);
+ if (revents & POLLERR)
+ {
+ // Get error number
+ socklen_t codesize = sizeof(int);
+ int errcode;
+ if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &errcode, &codesize) < 0)
+ errcode = errno;
+ eh->OnEventHandlerError(errcode);
+ continue;
+ }
+
+ if (revents & POLLIN)
+ {
+ eh->SetEventMask(eh->GetEventMask() & ~FD_READ_WILL_BLOCK);
+ eh->OnEventHandlerRead();
+ if (eh != GetRef(fd))
+ // whoops, deleted out from under us