: do-epoll-del ( fd mx events -- )
EPOLL_CTL_DEL swap do-epoll-ctl ;
-M: epoll-mx add-input-callback ( thread fd mx -- )
+M: epoll-mx add-input-callback
[ EPOLLIN do-epoll-add ] [ call-next-method ] 2bi ;
-M: epoll-mx add-output-callback ( thread fd mx -- )
+M: epoll-mx add-output-callback
[ EPOLLOUT do-epoll-add ] [ call-next-method ] 2bi ;
-M: epoll-mx remove-input-callbacks ( fd mx -- seq )
+M: epoll-mx remove-input-callbacks
2dup reads>> key? [
[ call-next-method ] [ EPOLLIN do-epoll-del ] 2bi
] [ 2drop f ] if ;
-M: epoll-mx remove-output-callbacks ( fd mx -- seq )
+M: epoll-mx remove-output-callbacks
2dup writes>> key? [
[ EPOLLOUT do-epoll-del ] [ call-next-method ] 2bi
] [ 2drop f ] if ;
: handle-events ( mx n -- )
[ dup events>> ] dip head-slice swap '[ _ handle-event ] each ;
-M: epoll-mx wait-for-events ( nanos mx -- )
+M: epoll-mx wait-for-events
swap 60000000 or dupd wait-event handle-events ;