1 #define _XOPEN_SOURCE 600
10 #include <sys/epoll.h>
13 #define EPOLLRDHUP 0x2000
22 epfd
= epoll_create(1);
24 twarn("epoll_create");
32 sockwant(Socket
*s
, int rw
)
36 if (!s
->added
&& !rw
) {
38 } else if (!s
->added
&& rw
) {
47 struct epoll_event ev
= {.events
=0};
56 ev
.events
|= EPOLLRDHUP
| EPOLLPRI
;
59 return epoll_ctl(epfd
, op
, s
->fd
, &ev
);
64 socknext(Socket
**s
, int64 timeout
)
67 struct epoll_event ev
= {.events
=0};
69 r
= epoll_wait(epfd
, &ev
, 1, (int)(timeout
/1000000));
70 if (r
== -1 && errno
!= EINTR
) {
77 if (ev
.events
& (EPOLLHUP
|EPOLLRDHUP
)) {
79 } else if (ev
.events
& EPOLLIN
) {
81 } else if (ev
.events
& EPOLLOUT
) {