--- kqreactor.py 2008-07-29 13:13:54.000000000 -0700 +++ /home/rnadhani/Downloads/kqreactor.py 2009-09-01 08:52:45.000000000 -0700 @@ -65,8 +65,13 @@ from zope.interface import implements -from kqsyscall import EVFILT_READ, EVFILT_WRITE, EV_DELETE, EV_ADD -from kqsyscall import kqueue, kevent +try: + import select26 as select +except ImportError: + import select + +# from kqsyscall import EVFILT_READ, EVFILT_WRITE, EV_DELETE, EV_ADD +# from kqsyscall import kqueue, kevent from twisted.internet.interfaces import IReactorFDSet @@ -105,7 +110,7 @@ Initialize kqueue object, file descriptor tracking dictionaries, and the base class. """ - self._kq = kqueue() + self._kq = select.kqueue() self._reads = {} self._writes = {} self._selectables = {} @@ -113,7 +118,7 @@ def _updateRegistration(self, *args): - self._kq.kevent([kevent(*args)], 0, 0) + self._kq.control([select.kevent(*args)], 0, 0) def addReader(self, reader): """Add a FileDescriptor for notification of data available to read. @@ -122,7 +127,7 @@ if fd not in self._reads: self._selectables[fd] = reader self._reads[fd] = 1 - self._updateRegistration(fd, EVFILT_READ, EV_ADD) + self._updateRegistration(fd, select.KQ_FILTER_READ, select.KQ_EV_ADD) def addWriter(self, writer): """Add a FileDescriptor for notification of data available to write. @@ -131,7 +136,7 @@ if fd not in self._writes: self._selectables[fd] = writer self._writes[fd] = 1 - self._updateRegistration(fd, EVFILT_WRITE, EV_ADD) + self._updateRegistration(fd, select.KQ_FILTER_WRITE, select.KQ_EV_ADD) def removeReader(self, reader): """Remove a Selectable for notification of data available to read. @@ -141,7 +146,7 @@ del self._reads[fd] if fd not in self._writes: del self._selectables[fd] - self._updateRegistration(fd, EVFILT_READ, EV_DELETE) + self._updateRegistration(fd, select.KQ_FILTER_READ, select.KQ_EV_DELETE) def removeWriter(self, writer): """Remove a Selectable for notification of data available to write. @@ -151,7 +156,7 @@ del self._writes[fd] if fd not in self._reads: del self._selectables[fd] - self._updateRegistration(fd, EVFILT_WRITE, EV_DELETE) + self._updateRegistration(fd, select.KQ_FILTER_WRITE, select.KQ_EV_DELETE) def removeAll(self): """Remove all selectables, and return a list of them.""" @@ -159,9 +164,9 @@ self.removeReader(self.waker) result = self._selectables.values() for fd in self._reads.keys(): - self._updateRegistration(fd, EVFILT_READ, EV_DELETE) + self._updateRegistration(fd, select.KQ_FILTER_READ, select.KQ_EV_DELETE) for fd in self._writes.keys(): - self._updateRegistration(fd, EVFILT_WRITE, EV_DELETE) + self._updateRegistration(fd, select.KQ_FILTER_WRITE, select.KQ_EV_DELETE) self._reads.clear() self._writes.clear() self._selectables.clear() @@ -186,7 +191,7 @@ timeout = int(timeout * 1000) # convert seconds to milliseconds try: - l = self._kq.kevent([], len(self._selectables), timeout) + l = self._kq.control([], len(self._selectables), timeout) except OSError, e: if e[0] == errno.EINTR: return @@ -206,9 +211,9 @@ def _doWriteOrRead(self, selectable, fd, filter): try: - if filter == EVFILT_READ: + if filter == select.KQ_FILTER_READ: why = selectable.doRead() - if filter == EVFILT_WRITE: + if filter == select.KQ_FILTER_WRITE: why = selectable.doWrite() if not selectable.fileno() == fd: why = main.CONNECTION_LOST