On Sun, Aug 18, 2019 at 12:36 AM Heiher <r@xxxxxx> wrote: > > 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 Is this behavior correct? any help? -- Best regards! Hev https://hev.cc