*/
static int select_event_loop_select(struct select_event_context *select_ev, struct timeval *tvalp)
{
- fd_set r_fds, w_fds, e_fds;
+ fd_set r_fds, w_fds;
struct tevent_fd *fde;
int selrtn;
int select_errno;
FD_ZERO(&r_fds);
FD_ZERO(&w_fds);
- FD_ZERO(&e_fds);
/* setup any fd events */
for (fde = select_ev->ev->fd_events; fde; fde = fde->next) {
if (fde->flags & TEVENT_FD_READ) {
FD_SET(fde->fd, &r_fds);
- FD_SET(fde->fd, &e_fds);
}
if (fde->flags & TEVENT_FD_WRITE) {
FD_SET(fde->fd, &w_fds);
}
tevent_trace_point_callback(select_ev->ev, TEVENT_TRACE_BEFORE_WAIT);
- selrtn = select(select_ev->maxfd+1, &r_fds, &w_fds, &e_fds, tvalp);
+ selrtn = select(select_ev->maxfd+1, &r_fds, &w_fds, NULL, tvalp);
select_errno = errno;
tevent_trace_point_callback(select_ev->ev, TEVENT_TRACE_AFTER_WAIT);
for (fde = select_ev->ev->fd_events; fde; fde = fde->next) {
uint16_t flags = 0;
- if (FD_ISSET(fde->fd, &r_fds)) {
- int saved_errno = errno;
- int available = 0;
- int ret;
-
- if (fde->flags & TEVENT_FD_READ) {
- flags |= TEVENT_FD_READ;
- }
-
- /* support for POLLHUP */
- ret = ioctl(fde->fd, FIONREAD, &available);
- if ((ret == -1) || (available == 0)) {
- /*
- * We should not report TEVENT_FD_WRITE,
- * after getting EOF.
- */
- fde->flags &= ~TEVENT_FD_WRITE;
- }
- errno = saved_errno;
-
+ if (FD_ISSET(fde->fd, &r_fds) && (fde->flags & TEVENT_FD_READ)) {
+ flags |= TEVENT_FD_READ;
}
if (FD_ISSET(fde->fd, &w_fds) && (fde->flags & TEVENT_FD_WRITE)) {
flags |= TEVENT_FD_WRITE;