+/** A specialisation of the SocketEngine class, designed to use BSD kqueue().
+ */
+class KQueueEngine : public SocketEngine
+{
+private:
+ int EngineHandle;
+ /** These are used by kqueue() to hold socket events
+ */
+ std::vector<struct kevent> ke_list;
+ /** This is a specialised time value used by kqueue()
+ */
+ struct timespec ts;
+public:
+ /** Create a new KQueueEngine
+ */
+ KQueueEngine();
+ /** Delete a KQueueEngine
+ */
+ virtual ~KQueueEngine();
+ bool AddFd(EventHandler* eh, int event_mask);
+ void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
+ virtual void DelFd(EventHandler* eh);
+ virtual int DispatchEvents();
+ virtual void RecoverFromFork();
+};
+
+KQueueEngine::KQueueEngine() : ke_list(1)