codekingpro/portable-devtools
114k
1import errno2from eventlet import patcher, support3from eventlet.hubs import hub, poll4select = patcher.original('select')5 6 7def is_available():8 return hasattr(select, 'epoll')9 10 11# NOTE: we rely on the fact that the epoll flag constants12# are identical in value to the poll constants13class Hub(poll.Hub):14 def __init__(self, clock=None):15 super(Hub, self).__init__(clock=clock)16 self.poll = select.epoll()17 18 def add(self, evtype, fileno, cb, tb, mac):19 oldlisteners = bool(self.listeners[self.READ].get(fileno) or20 self.listeners[self.WRITE].get(fileno))21 # not super() to avoid double register()22 listener = hub.BaseHub.add(self, evtype, fileno, cb, tb, mac)23 try:24 self.register(fileno, new=not oldlisteners)25 except IOError as ex: # ignore EEXIST, #8026 if support.get_errno(ex) != errno.EEXIST:27 raise28 return listener29 30 def do_poll(self, seconds):31 return self.poll.poll(seconds)32 