initial edge-triggered epoll model
[rainbows.git] / lib / rainbows / epoll / state.rb
blob6e554be97f05346978bc37ad4c2d3248154304c7
1 # -*- encoding: binary -*-
2 # :enddoc:
3 # used to keep track of state for each descriptor and avoid
4 # unneeded syscall or ENONENT overhead
5 module Rainbows::Epoll::State
6   EP = SleepyPenguin::Epoll.new
8   def epoll_disable
9     @epoll_active or return
10     @epoll_active = false
11     EP.del(self)
12   end
14   def epoll_enable(flags)
15     if @epoll_active
16       flags == @epoll_active or
17         EP.mod(self, @epoll_active = flags)
18     else
19       EP.add(self, @epoll_active = flags)
20     end
21   end
22 end