1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team
\r * See: http://www.inspircd.org/wiki/index.php/Credits
\r *
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r\r#ifndef __SOCKETENGINE_PORTS__
\r#define __SOCKETENGINE_PORTS__
\r\r#ifndef __sun
\r# error You need Solaris 10 or later to make use of this code.
\r#endif
\r\r#include <vector>
\r#include <string>
\r#include <map>
\r#include "inspircd_config.h"
\r#include "globals.h"
\r#include "inspircd.h"
\r#include "socketengine.h"
\r#include <port.h>
\r\rclass InspIRCd;
\r\r/** A specialisation of the SocketEngine class, designed to use solaris 10 I/O completion ports
\r */
\rclass PortsEngine : public SocketEngine
\r{
\rprivate:
\r /** These are used by epoll() to hold socket events
\r */
\r port_event_t events[MAX_DESCRIPTORS];
\rpublic:
\r /** Create a new PortsEngine
\r * @param Instance The creator of this object
\r */
\r PortsEngine(InspIRCd* Instance);
\r /** Delete a PortsEngine
\r */
\r virtual ~PortsEngine();
\r virtual bool AddFd(EventHandler* eh);
\r virtual int GetMaxFds();
\r virtual int GetRemainingFds();
\r virtual bool DelFd(EventHandler* eh, bool force = false);
\r virtual int DispatchEvents();
\r virtual std::string GetName();
\r virtual void WantWrite(EventHandler* eh);
\r};
\r\r/** Creates a SocketEngine
\r */
\rclass SocketEngineFactory
\r{
\rpublic:
\r /** Create a new instance of SocketEngine based on PortsEngine
\r */
\r SocketEngine* Create(InspIRCd* Instance) { return new PortsEngine(Instance); }
\r};
\r\r#endif
\r\r