6 static void handle(Socket
*s
, int events
);
11 static int ival
; // ms
15 sockinit(Handle f
, void *x
, int64 ns
)
20 epfd
= epoll_create1(0);
22 twarn("epoll_create");
29 sockwant(Socket
*s
, int rw
)
32 struct epoll_event ev
= {};
34 if (!s
->added
&& !rw
) {
36 } else if (!s
->added
&& rw
) {
53 ev
.events
|= EPOLLRDHUP
| EPOLLPRI
;
56 return epoll_ctl(epfd
, op
, s
->fd
, &ev
);
64 int64 e
, t
= nanoseconds();
65 struct epoll_event evs
[n
];
68 r
= epoll_wait(epfd
, evs
, n
, ival
);
69 if (r
== -1 && errno
!= EINTR
) {
76 if ((e
-t
) / 1000000 > ival
) {
82 handle(evs
[i
].data
.ptr
, evs
[i
].events
);
90 handle(Socket
*s
, int evset
)
94 if (evset
& EPOLLIN
) {
96 } else if (evset
& EPOLLOUT
) {