--- 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