diff --git a/lib/tevent/tevent_epoll.c b/lib/tevent/tevent_epoll.c index 01fcde6..d1f75c3 100644 --- a/lib/tevent/tevent_epoll.c +++ b/lib/tevent/tevent_epoll.c @@ -174,8 +174,8 @@ static void epoll_panic(struct epoll_event_context *epoll_ev, static uint32_t epoll_map_flags(uint16_t flags) { uint32_t ret = 0; - if (flags & TEVENT_FD_READ) ret |= (EPOLLIN | EPOLLERR | EPOLLHUP); - if (flags & TEVENT_FD_WRITE) ret |= (EPOLLOUT | EPOLLERR | EPOLLHUP); + if (flags & TEVENT_FD_READ) ret |= (EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP); + if (flags & TEVENT_FD_WRITE) ret |= (EPOLLOUT | EPOLLERR | EPOLLHUP | EPOLLRDHUP); return ret; } @@ -586,7 +586,7 @@ static void epoll_update_event(struct epoll_event_context *epoll_ev, struct teve } /* - Cope with epoll returning EPOLLHUP|EPOLLERR on an event. + Cope with epoll returning EPOLLHUP|EPOLLERR|EPOLLRDHUP on an event. Return true if there's nothing else to do, false if this event needs further handling. */ @@ -678,7 +678,7 @@ static int epoll_event_loop(struct epoll_event_context *epoll_ev, struct timeval mpx_fde = talloc_get_type_abort(fde->additional_data, struct tevent_fd); } - if (events[i].events & (EPOLLHUP|EPOLLERR)) { + if (events[i].events & (EPOLLHUP|EPOLLERR|EPOLLRDHUP)) { bool handled_fde = epoll_handle_hup_or_err(epoll_ev, fde); bool handled_mpx = epoll_handle_hup_or_err(epoll_ev, mpx_fde);