Hello, I've added a pipe file descriptor (fd1) to an epoll (fd3) with EPOLLOUT in edge-triggered mode, and then added the fd3 to another epoll (fd4) with EPOLLIN in edge-triggered too. Next, waiting for fd4 without timeout. When fd1 to be writable, i think epoll_wait(fd4, ...) only return once, because all file descriptors are added in edge-triggered mode. But, the actual result is returns many and many times until do once eopll_wait(fd3, ...). #include <stdio.h> #include <unistd.h> #include <sys/epoll.h> int main (int argc, char *argv[]) { int efd[2]; struct epoll_event e; efd[0] = epoll_create (1); if (efd[0] < 0) return -1; efd[1] = epoll_create (1); if (efd[1] < 0) return -2; e.events = EPOLLIN | EPOLLET; e.data.u64 = 1; if (epoll_ctl (efd[0], EPOLL_CTL_ADD, efd[1], &e) < 0) return -3; e.events = EPOLLOUT | EPOLLET; e.data.u64 = 2; if (epoll_ctl (efd[1], EPOLL_CTL_ADD, 1, &e) < 0) return -4; for (;;) { struct epoll_event events[16]; int nfds; nfds = epoll_wait (efd[0], events, 16, -1); printf ("nfds: %d\n", nfds); } close (efd[1]); close (efd[0]); return 0; } -- Best regards! Hev https://hev.cc