diff options
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/_epoll.pyx')
-rw-r--r-- | lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/_epoll.pyx | 285 |
1 files changed, 0 insertions, 285 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/_epoll.pyx b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/_epoll.pyx deleted file mode 100644 index b8d6aa7f..00000000 --- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/_epoll.pyx +++ /dev/null @@ -1,285 +0,0 @@ -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -""" -Interface to epoll I/O event notification facility. -""" - -# NOTE: The version of Pyrex you are using probably _does not work_ with -# Python 2.5. If you need to recompile this file, _make sure you are using -# a version of Pyrex which works with Python 2.5_. I am using 0.9.4.1 from -# <http://codespeak.net/svn/lxml/pyrex/>. -exarkun - -cdef extern from "stdio.h": - cdef extern void *malloc(int) - cdef extern void free(void *) - cdef extern int close(int) - -cdef extern from "errno.h": - cdef extern int errno - cdef extern char *strerror(int) - -cdef extern from "string.h": - cdef extern void *memset(void* s, int c, int n) - -cdef extern from "stdint.h": - ctypedef unsigned long uint32_t - ctypedef unsigned long long uint64_t - -cdef extern from "sys/epoll.h": - - cdef enum: - EPOLL_CTL_ADD = 1 - EPOLL_CTL_DEL = 2 - EPOLL_CTL_MOD = 3 - - cdef enum EPOLL_EVENTS: - c_EPOLLIN "EPOLLIN" = 0x001 - c_EPOLLPRI "EPOLLPRI" = 0x002 - c_EPOLLOUT "EPOLLOUT" = 0x004 - c_EPOLLRDNORM "EPOLLRDNORM" = 0x040 - c_EPOLLRDBAND "EPOLLRDBAND" = 0x080 - c_EPOLLWRNORM "EPOLLWRNORM" = 0x100 - c_EPOLLWRBAND "EPOLLWRBAND" = 0x200 - c_EPOLLMSG "EPOLLMSG" = 0x400 - c_EPOLLERR "EPOLLERR" = 0x008 - c_EPOLLHUP "EPOLLHUP" = 0x010 - c_EPOLLET "EPOLLET" = (1 << 31) - - ctypedef union epoll_data_t: - void *ptr - int fd - uint32_t u32 - uint64_t u64 - - cdef struct epoll_event: - uint32_t events - epoll_data_t data - - int epoll_create(int size) - int epoll_ctl(int epfd, int op, int fd, epoll_event *event) - int epoll_wait(int epfd, epoll_event *events, int maxevents, int timeout) - -cdef extern from "Python.h": - ctypedef struct PyThreadState - cdef extern PyThreadState *PyEval_SaveThread() - cdef extern void PyEval_RestoreThread(PyThreadState*) - -cdef call_epoll_wait(int fd, unsigned int maxevents, int timeout_msec): - """ - Wait for an I/O event, wrap epoll_wait(2). - - @type fd: C{int} - @param fd: The epoll file descriptor number. - - @type maxevents: C{int} - @param maxevents: Maximum number of events returned. - - @type timeout_msec: C{int} - @param timeout_msec: Maximum time in milliseconds waiting for events. 0 - makes it return immediately whereas -1 makes it wait indefinitely. - - @raise IOError: Raised if the underlying epoll_wait() call fails. - """ - cdef epoll_event *events - cdef int result - cdef int nbytes - cdef PyThreadState *_save - - nbytes = sizeof(epoll_event) * maxevents - events = <epoll_event*>malloc(nbytes) - memset(events, 0, nbytes) - try: - _save = PyEval_SaveThread() - result = epoll_wait(fd, events, maxevents, timeout_msec) - PyEval_RestoreThread(_save) - - if result == -1: - raise IOError(errno, strerror(errno)) - results = [] - for i from 0 <= i < result: - results.append((events[i].data.fd, <int>events[i].events)) - return results - finally: - free(events) - -cdef class epoll: - """ - Represent a set of file descriptors being monitored for events. - """ - - cdef int fd - cdef int initialized - - def __init__(self, int size=1023): - """ - The constructor arguments are compatible with select.poll.__init__. - """ - self.fd = epoll_create(size) - if self.fd == -1: - raise IOError(errno, strerror(errno)) - self.initialized = 1 - - def __dealloc__(self): - if self.initialized: - close(self.fd) - self.initialized = 0 - - def close(self): - """ - Close the epoll file descriptor. - """ - if self.initialized: - if close(self.fd) == -1: - raise IOError(errno, strerror(errno)) - self.initialized = 0 - - def fileno(self): - """ - Return the epoll file descriptor number. - """ - return self.fd - - def register(self, int fd, int events): - """ - Add (register) a file descriptor to be monitored by self. - - This method is compatible with select.epoll.register in Python 2.6. - - Wrap epoll_ctl(2). - - @type fd: C{int} - @param fd: File descriptor to modify - - @type events: C{int} - @param events: A bit set of IN, OUT, PRI, ERR, HUP, and ET. - - @raise IOError: Raised if the underlying epoll_ctl() call fails. - """ - cdef int result - cdef epoll_event evt - evt.events = events - evt.data.fd = fd - result = epoll_ctl(self.fd, CTL_ADD, fd, &evt) - if result == -1: - raise IOError(errno, strerror(errno)) - - def unregister(self, int fd): - """ - Remove (unregister) a file descriptor monitored by self. - - This method is compatible with select.epoll.unregister in Python 2.6. - - Wrap epoll_ctl(2). - - @type fd: C{int} - @param fd: File descriptor to modify - - @raise IOError: Raised if the underlying epoll_ctl() call fails. - """ - cdef int result - cdef epoll_event evt - # We don't have to fill evt.events for CTL_DEL. - evt.data.fd = fd - result = epoll_ctl(self.fd, CTL_DEL, fd, &evt) - if result == -1: - raise IOError(errno, strerror(errno)) - - def modify(self, int fd, int events): - """ - Modify the modified state of a file descriptor monitored by self. - - This method is compatible with select.epoll.modify in Python 2.6. - - Wrap epoll_ctl(2). - - @type fd: C{int} - @param fd: File descriptor to modify - - @type events: C{int} - @param events: A bit set of IN, OUT, PRI, ERR, HUP, and ET. - - @raise IOError: Raised if the underlying epoll_ctl() call fails. - """ - cdef int result - cdef epoll_event evt - evt.events = events - evt.data.fd = fd - result = epoll_ctl(self.fd, CTL_MOD, fd, &evt) - if result == -1: - raise IOError(errno, strerror(errno)) - - def _control(self, int op, int fd, int events): - """ - Modify the monitored state of a particular file descriptor. - - Wrap epoll_ctl(2). - - @type op: C{int} - @param op: One of CTL_ADD, CTL_DEL, or CTL_MOD - - @type fd: C{int} - @param fd: File descriptor to modify - - @type events: C{int} - @param events: A bit set of IN, OUT, PRI, ERR, HUP, and ET. - - @raise IOError: Raised if the underlying epoll_ctl() call fails. - """ - cdef int result - cdef epoll_event evt - evt.events = events - evt.data.fd = fd - result = epoll_ctl(self.fd, op, fd, &evt) - if result == -1: - raise IOError(errno, strerror(errno)) - - def wait(self, unsigned int maxevents, int timeout): - """ - Wait for an I/O event, wrap epoll_wait(2). - - @type maxevents: C{int} - @param maxevents: Maximum number of events returned. - - @type timeout: C{int} - @param timeout: Maximum time in milliseconds waiting for events. 0 - makes it return immediately whereas -1 makes it wait indefinitely. - - @raise IOError: Raised if the underlying epoll_wait() call fails. - """ - return call_epoll_wait(self.fd, maxevents, timeout) - - def poll(self, float timeout=-1, unsigned int maxevents=1024): - """ - Wait for an I/O event, wrap epoll_wait(2). - - This method is compatible with select.epoll.poll in Python 2.6. - - @type maxevents: C{int} - @param maxevents: Maximum number of events returned. - - @type timeout: C{int} - @param timeout: Maximum time waiting for events. 0 makes it return - immediately whereas -1 makes it wait indefinitely. - - @raise IOError: Raised if the underlying epoll_wait() call fails. - """ - return call_epoll_wait(self.fd, maxevents, <int>(timeout * 1000.0)) - - -CTL_ADD = EPOLL_CTL_ADD -CTL_DEL = EPOLL_CTL_DEL -CTL_MOD = EPOLL_CTL_MOD - -IN = EPOLLIN = c_EPOLLIN -OUT = EPOLLOUT = c_EPOLLOUT -PRI = EPOLLPRI = c_EPOLLPRI -ERR = EPOLLERR = c_EPOLLERR -HUP = EPOLLHUP = c_EPOLLHUP -ET = EPOLLET = c_EPOLLET - -RDNORM = EPOLLRDNORM = c_EPOLLRDNORM -RDBAND = EPOLLRDBAND = c_EPOLLRDBAND -WRNORM = EPOLLWRNORM = c_EPOLLWRNORM -WRBAND = EPOLLWRBAND = c_EPOLLWRBAND -MSG = EPOLLMSG = c_EPOLLMSG |