MCPcopy Create free account
hub / github.com/Bitmessage/PyBitmessage / epoll_poller

Function epoll_poller

src/network/asyncore_pollchoose.py:307–358  ·  view source on GitHub ↗

A poller which uses epoll(), supported on Linux 2.5.44 and newer.

(timeout=0.0, map=None)

Source from the content-addressed store, hash-verified

305poll2 = poll3 = poll_poller
306
307def epoll_poller(timeout=0.0, map=None):
308 """A poller which uses epoll(), supported on Linux 2.5.44 and newer."""
309 if map is None:
310 map = socket_map
311 try:
312 epoll_poller.pollster
313 except AttributeError:
314 epoll_poller.pollster = select.epoll()
315 if map:
316 for fd, obj in map.items():
317 flags = newflags = 0
318 if obj.readable():
319 flags |= select.POLLIN | select.POLLPRI
320 newflags |= OP_READ
321 else:
322 newflags &= ~ OP_READ
323 # accepting sockets should not be writable
324 if obj.writable() and not obj.accepting:
325 flags |= select.POLLOUT
326 newflags |= OP_WRITE
327 else:
328 newflags &= ~ OP_WRITE
329 if newflags != obj.poller_flags:
330 obj.poller_flags = newflags
331 # Only check for exceptions if object was either readable
332 # or writable.
333 flags |= select.POLLERR | select.POLLHUP | select.POLLNVAL
334 try:
335 if obj.poller_registered:
336 epoll_poller.pollster.modify(fd, flags)
337 else:
338 epoll_poller.pollster.register(fd, flags)
339 obj.poller_registered = True
340 except IOError:
341 pass
342 try:
343 r = epoll_poller.pollster.poll(timeout)
344 except IOError as e:
345 if e.errno != EINTR:
346 raise
347 r = []
348 except select.error, err:
349 if err.args[0] != EINTR:
350 raise
351 r = []
352 for fd, flags in random.sample(r, len(r)):
353 obj = map.get(fd)
354 if obj is None:
355 continue
356 readwrite(obj, flags)
357 else:
358 current_thread().stop.wait(timeout)
359
360def kqueue_poller(timeout=0.0, map=None):
361 """A poller which uses kqueue(), BSD specific."""

Callers

nothing calls this directly

Calls 7

readwriteFunction · 0.85
itemsMethod · 0.80
registerMethod · 0.80
waitMethod · 0.80
readableMethod · 0.45
writableMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected