inspircd/include/socketengines/socketengine_kqueue.h
brain 2db77cda56 Automatic detection and allocation of max fds. No longer needs recompile to change, just adjust it in your kernel or whatever and restart insp.
Please note that select and iocp socket engines do not support detection and are always set to FD_SETSIZE and 10240 descriptors respectively.


git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9263 e03df62e-2008-0410-955e-edbf42e46eb7
2008-04-02 17:08:09 +00:00

70 lines
1.7 KiB
C++

/* +------------------------------------+
* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
* InspIRCd: (C) 2002-2008 InspIRCd Development Team
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
* the file COPYING for details.
*
* ---------------------------------------------------
*/
#ifndef __SOCKETENGINE_KQUEUE__
#define __SOCKETENGINE_KQUEUE__
#include <vector>
#include <string>
#include <map>
#include "inspircd_config.h"
#include "globals.h"
#include "inspircd.h"
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
#include "socketengine.h"
class InspIRCd;
/** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
*/
class KQueueEngine : public SocketEngine
{
private:
/** These are used by kqueue() to hold socket events
*/
struct kevent* ke_list;
/** This is a specialised time value used by kqueue()
*/
struct timespec ts;
public:
/** Create a new KQueueEngine
* @param Instance The creator of this object
*/
KQueueEngine(InspIRCd* Instance);
/** Delete a KQueueEngine
*/
virtual ~KQueueEngine();
virtual bool AddFd(EventHandler* eh);
virtual int GetMaxFds();
virtual int GetRemainingFds();
virtual bool DelFd(EventHandler* eh, bool force = false);
virtual int DispatchEvents();
virtual std::string GetName();
virtual void WantWrite(EventHandler* eh);
virtual void RecoverFromFork();
};
/** Creates a SocketEngine
*/
class SocketEngineFactory
{
public:
/** Create a new instance of SocketEngine based on KQueueEngine
*/
SocketEngine* Create(InspIRCd* Instance) { return new KQueueEngine(Instance); }
};
#endif