+
+#ifndef SOCKETENGINE_PORTS
+#define SOCKETENGINE_PORTS
+
+#ifndef __sun
+# error You need Solaris 10 or later to make use of this code.
+#endif
+
+#include <vector>
+#include <string>
+#include <map>
+#include "inspircd_config.h"
+#include "inspircd.h"
+#include "socketengine.h"
+#include <port.h>
+#include <iostream>
+
+/** A specialisation of the SocketEngine class, designed to use solaris 10 I/O completion ports
+ */
+class PortsEngine : public SocketEngine
+{
+private:
+ /** These are used by epoll() to hold socket events
+ */
+ port_event_t* events;
+public:
+ /** Create a new PortsEngine
+ */
+ PortsEngine();
+ /** Delete a PortsEngine
+ */
+ virtual ~PortsEngine();
+ virtual bool AddFd(EventHandler* eh, int event_mask);
+ void OnSetEvent(EventHandler* eh, int old_event, int new_event);
+ virtual void DelFd(EventHandler* eh);
+ virtual int DispatchEvents();
+ virtual std::string GetName();
+ virtual void WantWrite(EventHandler* eh);
+};
+
+#endif
+
+