mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 10:39:02 -04:00
Remove include/inspircd_se_config.h and socketengine-specific headers
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11784 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
4a64082e31
commit
7aa5e059a8
@ -163,14 +163,14 @@ install: target@EXTRA_DIR@
|
||||
|
||||
clean:
|
||||
@echo Cleaning...
|
||||
@rm -f src/inspircd src/modes/modeclasses.a
|
||||
@rm -f src/*.so src/modules/*.so src/commands/*.so
|
||||
@rm -f src/*.o src/*/*.o src/modules/*/*.o
|
||||
@rm -f src/.*.d src/*/.*.d src/modules/*/.*.d
|
||||
@rm -f $(BUILDPATH)/bin/inspircd $(BUILDPATH)/include $(BUILDPATH)/real.mk
|
||||
@rm -rf $(BUILDPATH)/obj $(BUILDPATH)/modules
|
||||
@-rmdir $(BUILDPATH)/bin
|
||||
@-rmdir $(BUILDPATH)
|
||||
@-rm -f src/inspircd src/modes/modeclasses.a include/inspircd_se_config.h
|
||||
@-rm -f src/*.so src/modules/*.so src/commands/*.so
|
||||
@-rm -f src/*.o src/*/*.o src/modules/*/*.o
|
||||
@-rm -f src/.*.d src/*/.*.d src/modules/*/.*.d
|
||||
@-rm -f $(BUILDPATH)/bin/inspircd $(BUILDPATH)/include $(BUILDPATH)/real.mk
|
||||
@-rm -rf $(BUILDPATH)/obj $(BUILDPATH)/modules
|
||||
@-rmdir $(BUILDPATH)/bin 2>/dev/null
|
||||
@-rmdir $(BUILDPATH) 2>/dev/null
|
||||
@echo Completed.
|
||||
|
||||
deinstall:
|
||||
@ -193,7 +193,6 @@ configureclean:
|
||||
rm -f GNUmakefile
|
||||
rm -f include/inspircd_config.h
|
||||
rm -f include/inspircd_version.h
|
||||
rm -f include/inspircd_se_config.h
|
||||
|
||||
distclean: clean configureclean
|
||||
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -17,7 +17,6 @@
|
||||
|
||||
/include/inspircd_config.h
|
||||
/include/inspircd_version.h
|
||||
/include/inspircd_se_config.h
|
||||
|
||||
/src/modules/m_geoip.cpp
|
||||
/src/modules/m_ldapauth.cpp
|
||||
|
14
configure
vendored
14
configure
vendored
@ -997,18 +997,6 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
|
||||
print FILEHANDLE "\n#include \"threadengines/threadengine_pthread.h\"\n\n#endif\n";
|
||||
close(FILEHANDLE);
|
||||
|
||||
open(FILEHANDLE, ">include/inspircd_se_config.h.tmp");
|
||||
print FILEHANDLE <<EOF;
|
||||
/* Auto generated by configure, do not modify or commit to svn! */
|
||||
#ifndef __CONFIGURATION_SOCKETENGINE__
|
||||
#define __CONFIGURATION_SOCKETENGINE__
|
||||
|
||||
#include "socketengines/$config{SOCKETENGINE}.h"
|
||||
|
||||
#endif
|
||||
EOF
|
||||
close(FILEHANDLE);
|
||||
|
||||
open(FILEHANDLE, ">include/inspircd_version.h.tmp");
|
||||
print FILEHANDLE <<EOF;
|
||||
#define VERSION "$version"
|
||||
@ -1017,7 +1005,7 @@ EOF
|
||||
EOF
|
||||
close FILEHANDLE;
|
||||
|
||||
for my $file (qw(include/inspircd_config.h include/inspircd_se_config.h include/inspircd_version.h)) {
|
||||
for my $file (qw(include/inspircd_config.h include/inspircd_version.h)) {
|
||||
my $diff = 0;
|
||||
open my $fh1, $file or $diff = 1;
|
||||
open my $fh2, $file.'.tmp' or die "Can't read $file.tmp that we just wrote: $!";
|
||||
|
@ -473,5 +473,7 @@ public:
|
||||
void GetStats(float &kbitpersec_in, float &kbitpersec_out, float &kbitpersec_total);
|
||||
};
|
||||
|
||||
SocketEngine* CreateSocketEngine();
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -1,59 +0,0 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_EPOLL__
|
||||
#define __SOCKETENGINE_EPOLL__
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
#include <sys/epoll.h>
|
||||
#define EP_DELAY 5
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
|
||||
*/
|
||||
class EPollEngine : public SocketEngine
|
||||
{
|
||||
private:
|
||||
/** These are used by epoll() to hold socket events
|
||||
*/
|
||||
struct epoll_event* events;
|
||||
int EngineHandle;
|
||||
public:
|
||||
/** Create a new EPollEngine
|
||||
*/
|
||||
EPollEngine();
|
||||
/** Delete an EPollEngine
|
||||
*/
|
||||
virtual ~EPollEngine();
|
||||
virtual bool AddFd(EventHandler* eh, int event_mask);
|
||||
virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on EpollEngine
|
||||
*/
|
||||
SocketEngine* Create() { return new EPollEngine; }
|
||||
};
|
||||
|
||||
#endif
|
@ -1,237 +0,0 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_IOCP__
|
||||
#define __SOCKETENGINE_IOCP__
|
||||
|
||||
#define READ_BUFFER_SIZE 600
|
||||
#define USING_IOCP 1
|
||||
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd_win32wrapper.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
/** Socket overlapped event types
|
||||
*/
|
||||
enum SocketIOEvent
|
||||
{
|
||||
/** Read ready */
|
||||
SOCKET_IO_EVENT_READ_READY = 0,
|
||||
/** Write ready */
|
||||
SOCKET_IO_EVENT_WRITE_READY = 1,
|
||||
/** Accept ready */
|
||||
SOCKET_IO_EVENT_ACCEPT = 2,
|
||||
/** Error occured */
|
||||
SOCKET_IO_EVENT_ERROR = 3,
|
||||
/** Number of events */
|
||||
NUM_SOCKET_IO_EVENTS = 4,
|
||||
};
|
||||
|
||||
/** Represents a windows overlapped IO event
|
||||
*/
|
||||
class Overlapped
|
||||
{
|
||||
public:
|
||||
/** Overlap event */
|
||||
OVERLAPPED m_overlap;
|
||||
/** Type of event */
|
||||
SocketIOEvent m_event;
|
||||
#ifdef WIN64
|
||||
/** Parameters */
|
||||
unsigned __int64 m_params;
|
||||
#else
|
||||
/** Parameters */
|
||||
unsigned long m_params;
|
||||
#endif
|
||||
/** Create an overlapped event
|
||||
*/
|
||||
Overlapped(SocketIOEvent ev, int params) : m_event(ev), m_params(params)
|
||||
{
|
||||
memset(&m_overlap, 0, sizeof(OVERLAPPED));
|
||||
}
|
||||
};
|
||||
|
||||
/** Specific to UDP sockets with overlapped IO
|
||||
*/
|
||||
struct udp_overlap
|
||||
{
|
||||
unsigned char udp_buffer[600];
|
||||
unsigned long udp_len;
|
||||
sockaddr udp_sockaddr[2];
|
||||
unsigned long udp_sockaddr_len;
|
||||
};
|
||||
|
||||
/** Specific to accepting sockets with overlapped IO
|
||||
*/
|
||||
struct accept_overlap
|
||||
{
|
||||
int socket;
|
||||
char buf[1024];
|
||||
};
|
||||
|
||||
/** Implementation of SocketEngine that implements windows IO Completion Ports
|
||||
*/
|
||||
class IOCPEngine : public SocketEngine
|
||||
{
|
||||
/** Creates a "fake" file descriptor for use with an IOCP socket.
|
||||
* This is a little slow, but it isnt called too much. We'll fix it
|
||||
* in a future release.
|
||||
* @return -1 if there are no free slots, and an integer if it finds one.
|
||||
*/
|
||||
__inline int GenerateFd(int RealFd)
|
||||
{
|
||||
int index_hash = RealFd % MAX_DESCRIPTORS;
|
||||
if(ref[index_hash] == 0)
|
||||
return index_hash;
|
||||
else
|
||||
{
|
||||
register int i = 0;
|
||||
for(; i < MAX_DESCRIPTORS; ++i)
|
||||
if(ref[i] == 0)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Global I/O completion port that sockets attach to.
|
||||
*/
|
||||
HANDLE m_completionPort;
|
||||
|
||||
/** This is kinda shitty... :/ for getting an address from a real fd.
|
||||
*/
|
||||
std::map<int, EventHandler*> m_binding;
|
||||
|
||||
public:
|
||||
/** Holds the preallocated buffer passed to WSARecvFrom
|
||||
* function. Yes, I know, it's a dirty hack.
|
||||
*/
|
||||
udp_overlap * udp_ov;
|
||||
|
||||
/** Creates an IOCP Socket Engine
|
||||
* @param Instance The creator of this object
|
||||
*/
|
||||
IOCPEngine();
|
||||
|
||||
/** Deletes an IOCP socket engine and all the attached sockets
|
||||
*/
|
||||
~IOCPEngine();
|
||||
|
||||
/** Adds an event handler to the completion port, and sets up initial events.
|
||||
* @param eh EventHandler to add
|
||||
* @return True if success, false if no room
|
||||
*/
|
||||
bool AddFd(EventHandler* eh, int event_mask);
|
||||
|
||||
/** Gets the maximum number of file descriptors that this engine can handle.
|
||||
* @return The number of file descriptors
|
||||
*/
|
||||
__inline int GetMaxFds() { return MAX_DESCRIPTORS; }
|
||||
|
||||
/** Gets the number of free/remaining file descriptors under this engine.
|
||||
* @return Remaining count
|
||||
*/
|
||||
__inline int GetRemainingFds()
|
||||
{
|
||||
register int count = 0;
|
||||
register int i = 0;
|
||||
for(; i < MAX_DESCRIPTORS; ++i)
|
||||
if(ref[i] == 0)
|
||||
++count;
|
||||
return count;
|
||||
}
|
||||
|
||||
/** Removes a file descriptor from the set, preventing it from receiving any more events
|
||||
* @return True if remove was successful, false otherwise
|
||||
*/
|
||||
bool DelFd(EventHandler* eh, bool force = false);
|
||||
|
||||
/** Called every loop to handle input/output events for all sockets under this engine
|
||||
* @return The number of "changed" sockets.
|
||||
*/
|
||||
int DispatchEvents();
|
||||
|
||||
/** Gets the name of this socket engine as a string.
|
||||
* @return string of socket engine name
|
||||
*/
|
||||
std::string GetName();
|
||||
|
||||
void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
|
||||
/** Posts a completion event on the specified socket.
|
||||
* @param eh EventHandler for message
|
||||
* @param type Event Type
|
||||
* @param param Event Parameter
|
||||
* @return True if added, false if not
|
||||
*/
|
||||
bool PostCompletionEvent(EventHandler* eh, SocketIOEvent type, int param);
|
||||
|
||||
/** Posts a read event on the specified socket
|
||||
* @param eh EventHandler (socket)
|
||||
*/
|
||||
void PostReadEvent(EventHandler* eh);
|
||||
|
||||
/** Posts an accept event on the specified socket
|
||||
* @param eh EventHandler (socket)
|
||||
*/
|
||||
void PostAcceptEvent(EventHandler* eh);
|
||||
|
||||
/** Returns the EventHandler attached to a specific fd.
|
||||
* If the fd isnt in the socketengine, returns NULL.
|
||||
* @param fd The event handler to look for
|
||||
* @return A pointer to the event handler, or NULL
|
||||
*/
|
||||
EventHandler* GetRef(int fd);
|
||||
|
||||
/** Returns true if a file descriptor exists in
|
||||
* the socket engine's list.
|
||||
* @param fd The event handler to look for
|
||||
* @return True if this fd has an event handler
|
||||
*/
|
||||
bool HasFd(int fd);
|
||||
|
||||
/** Returns the EventHandler attached to a specific fd.
|
||||
* If the fd isnt in the socketengine, returns NULL.
|
||||
* @param fd The event handler to look for
|
||||
* @return A pointer to the event handler, or NULL
|
||||
*/
|
||||
EventHandler* GetIntRef(int fd);
|
||||
|
||||
bool BoundsCheckFd(EventHandler* eh);
|
||||
|
||||
virtual int Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen);
|
||||
|
||||
virtual int RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
|
||||
|
||||
virtual int Blocking(int fd);
|
||||
|
||||
virtual int NonBlocking(int fd);
|
||||
|
||||
virtual int GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen);
|
||||
|
||||
virtual int Close(int fd);
|
||||
|
||||
virtual int Close(EventHandler* fd);
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on IOCPEngine
|
||||
*/
|
||||
SocketEngine* Create() { return new IOCPEngine; }
|
||||
};
|
||||
|
||||
#endif
|
@ -1,64 +0,0 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/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 "inspircd.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/time.h>
|
||||
#include "socketengine.h"
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
|
||||
*/
|
||||
class KQueueEngine : public SocketEngine
|
||||
{
|
||||
private:
|
||||
int EngineHandle;
|
||||
/** 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
|
||||
*/
|
||||
KQueueEngine();
|
||||
/** Delete a KQueueEngine
|
||||
*/
|
||||
virtual ~KQueueEngine();
|
||||
bool AddFd(EventHandler* eh, int event_mask);
|
||||
void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
virtual void RecoverFromFork();
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on KQueueEngine
|
||||
*/
|
||||
SocketEngine* Create() { return new KQueueEngine; }
|
||||
};
|
||||
|
||||
#endif
|
@ -1,74 +0,0 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_POLL__
|
||||
#define __SOCKETENGINE_POLL__
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
#ifndef WINDOWS
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN /* fuck every fucking OS ever made. needed by poll.h to work.*/
|
||||
#endif
|
||||
#include <poll.h>
|
||||
#include <sys/poll.h>
|
||||
#else
|
||||
/* *grumble* */
|
||||
#define struct pollfd WSAPOLLFD
|
||||
#define poll WSAPoll
|
||||
#endif
|
||||
|
||||
class InspIRCd;
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use poll().
|
||||
*/
|
||||
class PollEngine : public SocketEngine
|
||||
{
|
||||
private:
|
||||
/** These are used by poll() to hold socket events
|
||||
*/
|
||||
struct pollfd *events;
|
||||
/** This map maps fds to an index in the events array.
|
||||
*/
|
||||
std::map<int, unsigned int> fd_mappings;
|
||||
public:
|
||||
/** Create a new PollEngine
|
||||
*/
|
||||
PollEngine();
|
||||
/** Delete a PollEngine
|
||||
*/
|
||||
virtual ~PollEngine();
|
||||
virtual bool AddFd(EventHandler* eh, int event_mask);
|
||||
virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
virtual EventHandler* GetRef(int fd);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on PollEngine
|
||||
*/
|
||||
SocketEngine* Create() { return new PollEngine; }
|
||||
};
|
||||
|
||||
#endif
|
@ -1,64 +0,0 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#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>
|
||||
|
||||
/** 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
|
||||
* @param Instance The creator of this object
|
||||
*/
|
||||
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 bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
virtual void WantWrite(EventHandler* eh);
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on PortsEngine
|
||||
*/
|
||||
SocketEngine* Create() { return new PortsEngine; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1,55 +0,0 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_SELECT__
|
||||
#define __SOCKETENGINE_SELECT__
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#ifndef WINDOWS
|
||||
#include <sys/select.h>
|
||||
#endif // WINDOWS
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use traditional select().
|
||||
*/
|
||||
class SelectEngine : public SocketEngine
|
||||
{
|
||||
public:
|
||||
/** Create a new SelectEngine
|
||||
*/
|
||||
SelectEngine();
|
||||
/** Delete a SelectEngine
|
||||
*/
|
||||
virtual ~SelectEngine();
|
||||
virtual bool AddFd(EventHandler* eh, int event_mask);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
void OnSetEvent(EventHandler* eh, int, int);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on SelectEngine
|
||||
*/
|
||||
SocketEngine* Create() { return new SelectEngine; }
|
||||
};
|
||||
|
||||
#endif
|
@ -37,9 +37,10 @@ all: bin/inspircd modules
|
||||
|
||||
END
|
||||
my @core_deps;
|
||||
for my $file (<*.cpp>, <modes/*.cpp>, "socketengines/$ENV{SOCKETENGINE}.cpp", "threadengines/threadengine_pthread.cpp") {
|
||||
for my $file (<*.cpp>, <modes/*.cpp>, <socketengines/*.cpp>, "threadengines/threadengine_pthread.cpp") {
|
||||
my $out = find_output $file;
|
||||
dep_cpp $file, $out;
|
||||
next if $file =~ m#^socketengines/# && $file ne "socketengines/$ENV{SOCKETENGINE}.cpp";
|
||||
push @core_deps, $out;
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,6 @@ looks like this, walks like this or tastes like this.
|
||||
#include <arpa/inet.h>
|
||||
#else
|
||||
#include "inspircd_win32wrapper.h"
|
||||
#include "inspircd_se_config.h"
|
||||
#endif
|
||||
|
||||
#include "inspircd.h"
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include "inspircd.h"
|
||||
#include <fstream>
|
||||
#include "socketengine.h"
|
||||
#include "inspircd_se_config.h"
|
||||
#include "filelogger.h"
|
||||
|
||||
FileLogStream::FileLogStream(int loglevel, FileWriter *fw)
|
||||
|
@ -36,7 +36,6 @@
|
||||
#include "xline.h"
|
||||
#include "bancache.h"
|
||||
#include "socketengine.h"
|
||||
#include "inspircd_se_config.h"
|
||||
#include "socket.h"
|
||||
#include "command_parse.h"
|
||||
#include "exitcodes.h"
|
||||
@ -374,8 +373,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
|
||||
// This must be created first, so other parts of Insp can use it while starting up
|
||||
this->Logs = new LogManager;
|
||||
|
||||
SocketEngineFactory SEF;
|
||||
SE = SEF.Create();
|
||||
SE = CreateSocketEngine();
|
||||
|
||||
this->Threads = new ThreadEngine;
|
||||
|
||||
|
@ -11,35 +11,7 @@
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
/* $Core */
|
||||
|
||||
/********* DEFAULTS **********/
|
||||
|
||||
/* $ExtraSources: socketengines/socketengine_select.cpp */
|
||||
/* $ExtraObjects: socketengine_select.o */
|
||||
|
||||
/* $If: USE_POLL */
|
||||
/* $ExtraSources: socketengines/socketengine_poll.cpp */
|
||||
/* $ExtraObjects: socketengine_poll.o */
|
||||
/* $EndIf */
|
||||
|
||||
/* $If: USE_KQUEUE */
|
||||
/* $ExtraSources: socketengines/socketengine_kqueue.cpp */
|
||||
/* $ExtraObjects: socketengine_kqueue.o */
|
||||
/* $EndIf */
|
||||
|
||||
/* $If: USE_EPOLL */
|
||||
/* $ExtraSources: socketengines/socketengine_epoll.cpp */
|
||||
/* $ExtraObjects: socketengine_epoll.o */
|
||||
/* $EndIf */
|
||||
|
||||
/* $If: USE_PORTS */
|
||||
/* $ExtraSources: socketengines/socketengine_ports.cpp */
|
||||
/* $ExtraObjects: socketengine_ports.o */
|
||||
/* $EndIf */
|
||||
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
EventHandler::EventHandler()
|
||||
{
|
||||
|
@ -11,10 +11,38 @@
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "inspircd.h"
|
||||
#include "exitcodes.h"
|
||||
#include "socketengines/socketengine_epoll.h"
|
||||
#include "socketengine.h"
|
||||
#include <sys/epoll.h>
|
||||
#include <ulimit.h>
|
||||
#define EP_DELAY 5
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
|
||||
*/
|
||||
class EPollEngine : public SocketEngine
|
||||
{
|
||||
private:
|
||||
/** These are used by epoll() to hold socket events
|
||||
*/
|
||||
struct epoll_event* events;
|
||||
int EngineHandle;
|
||||
public:
|
||||
/** Create a new EPollEngine
|
||||
*/
|
||||
EPollEngine();
|
||||
/** Delete an EPollEngine
|
||||
*/
|
||||
virtual ~EPollEngine();
|
||||
virtual bool AddFd(EventHandler* eh, int event_mask);
|
||||
virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
};
|
||||
|
||||
EPollEngine::EPollEngine()
|
||||
{
|
||||
@ -216,3 +244,7 @@ std::string EPollEngine::GetName()
|
||||
return "epoll";
|
||||
}
|
||||
|
||||
SocketEngine* CreateSocketEngine()
|
||||
{
|
||||
return new EPollEngine;
|
||||
}
|
||||
|
@ -11,7 +11,234 @@
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "socketengines/socketengine_iocp.h"
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_IOCP__
|
||||
#define __SOCKETENGINE_IOCP__
|
||||
|
||||
#define READ_BUFFER_SIZE 600
|
||||
#define USING_IOCP 1
|
||||
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd_win32wrapper.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
/** Socket overlapped event types
|
||||
*/
|
||||
enum SocketIOEvent
|
||||
{
|
||||
/** Read ready */
|
||||
SOCKET_IO_EVENT_READ_READY = 0,
|
||||
/** Write ready */
|
||||
SOCKET_IO_EVENT_WRITE_READY = 1,
|
||||
/** Accept ready */
|
||||
SOCKET_IO_EVENT_ACCEPT = 2,
|
||||
/** Error occured */
|
||||
SOCKET_IO_EVENT_ERROR = 3,
|
||||
/** Number of events */
|
||||
NUM_SOCKET_IO_EVENTS = 4,
|
||||
};
|
||||
|
||||
/** Represents a windows overlapped IO event
|
||||
*/
|
||||
class Overlapped
|
||||
{
|
||||
public:
|
||||
/** Overlap event */
|
||||
OVERLAPPED m_overlap;
|
||||
/** Type of event */
|
||||
SocketIOEvent m_event;
|
||||
#ifdef WIN64
|
||||
/** Parameters */
|
||||
unsigned __int64 m_params;
|
||||
#else
|
||||
/** Parameters */
|
||||
unsigned long m_params;
|
||||
#endif
|
||||
/** Create an overlapped event
|
||||
*/
|
||||
Overlapped(SocketIOEvent ev, int params) : m_event(ev), m_params(params)
|
||||
{
|
||||
memset(&m_overlap, 0, sizeof(OVERLAPPED));
|
||||
}
|
||||
};
|
||||
|
||||
/** Specific to UDP sockets with overlapped IO
|
||||
*/
|
||||
struct udp_overlap
|
||||
{
|
||||
unsigned char udp_buffer[600];
|
||||
unsigned long udp_len;
|
||||
sockaddr udp_sockaddr[2];
|
||||
unsigned long udp_sockaddr_len;
|
||||
};
|
||||
|
||||
/** Specific to accepting sockets with overlapped IO
|
||||
*/
|
||||
struct accept_overlap
|
||||
{
|
||||
int socket;
|
||||
char buf[1024];
|
||||
};
|
||||
|
||||
/** Implementation of SocketEngine that implements windows IO Completion Ports
|
||||
*/
|
||||
class IOCPEngine : public SocketEngine
|
||||
{
|
||||
/** Creates a "fake" file descriptor for use with an IOCP socket.
|
||||
* This is a little slow, but it isnt called too much. We'll fix it
|
||||
* in a future release.
|
||||
* @return -1 if there are no free slots, and an integer if it finds one.
|
||||
*/
|
||||
__inline int GenerateFd(int RealFd)
|
||||
{
|
||||
int index_hash = RealFd % MAX_DESCRIPTORS;
|
||||
if(ref[index_hash] == 0)
|
||||
return index_hash;
|
||||
else
|
||||
{
|
||||
register int i = 0;
|
||||
for(; i < MAX_DESCRIPTORS; ++i)
|
||||
if(ref[i] == 0)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Global I/O completion port that sockets attach to.
|
||||
*/
|
||||
HANDLE m_completionPort;
|
||||
|
||||
/** This is kinda shitty... :/ for getting an address from a real fd.
|
||||
*/
|
||||
std::map<int, EventHandler*> m_binding;
|
||||
|
||||
public:
|
||||
/** Holds the preallocated buffer passed to WSARecvFrom
|
||||
* function. Yes, I know, it's a dirty hack.
|
||||
*/
|
||||
udp_overlap * udp_ov;
|
||||
|
||||
/** Creates an IOCP Socket Engine
|
||||
* @param Instance The creator of this object
|
||||
*/
|
||||
IOCPEngine();
|
||||
|
||||
/** Deletes an IOCP socket engine and all the attached sockets
|
||||
*/
|
||||
~IOCPEngine();
|
||||
|
||||
/** Adds an event handler to the completion port, and sets up initial events.
|
||||
* @param eh EventHandler to add
|
||||
* @return True if success, false if no room
|
||||
*/
|
||||
bool AddFd(EventHandler* eh, int event_mask);
|
||||
|
||||
/** Gets the maximum number of file descriptors that this engine can handle.
|
||||
* @return The number of file descriptors
|
||||
*/
|
||||
__inline int GetMaxFds() { return MAX_DESCRIPTORS; }
|
||||
|
||||
/** Gets the number of free/remaining file descriptors under this engine.
|
||||
* @return Remaining count
|
||||
*/
|
||||
__inline int GetRemainingFds()
|
||||
{
|
||||
register int count = 0;
|
||||
register int i = 0;
|
||||
for(; i < MAX_DESCRIPTORS; ++i)
|
||||
if(ref[i] == 0)
|
||||
++count;
|
||||
return count;
|
||||
}
|
||||
|
||||
/** Removes a file descriptor from the set, preventing it from receiving any more events
|
||||
* @return True if remove was successful, false otherwise
|
||||
*/
|
||||
bool DelFd(EventHandler* eh, bool force = false);
|
||||
|
||||
/** Called every loop to handle input/output events for all sockets under this engine
|
||||
* @return The number of "changed" sockets.
|
||||
*/
|
||||
int DispatchEvents();
|
||||
|
||||
/** Gets the name of this socket engine as a string.
|
||||
* @return string of socket engine name
|
||||
*/
|
||||
std::string GetName();
|
||||
|
||||
void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
|
||||
/** Posts a completion event on the specified socket.
|
||||
* @param eh EventHandler for message
|
||||
* @param type Event Type
|
||||
* @param param Event Parameter
|
||||
* @return True if added, false if not
|
||||
*/
|
||||
bool PostCompletionEvent(EventHandler* eh, SocketIOEvent type, int param);
|
||||
|
||||
/** Posts a read event on the specified socket
|
||||
* @param eh EventHandler (socket)
|
||||
*/
|
||||
void PostReadEvent(EventHandler* eh);
|
||||
|
||||
/** Posts an accept event on the specified socket
|
||||
* @param eh EventHandler (socket)
|
||||
*/
|
||||
void PostAcceptEvent(EventHandler* eh);
|
||||
|
||||
/** Returns the EventHandler attached to a specific fd.
|
||||
* If the fd isnt in the socketengine, returns NULL.
|
||||
* @param fd The event handler to look for
|
||||
* @return A pointer to the event handler, or NULL
|
||||
*/
|
||||
EventHandler* GetRef(int fd);
|
||||
|
||||
/** Returns true if a file descriptor exists in
|
||||
* the socket engine's list.
|
||||
* @param fd The event handler to look for
|
||||
* @return True if this fd has an event handler
|
||||
*/
|
||||
bool HasFd(int fd);
|
||||
|
||||
/** Returns the EventHandler attached to a specific fd.
|
||||
* If the fd isnt in the socketengine, returns NULL.
|
||||
* @param fd The event handler to look for
|
||||
* @return A pointer to the event handler, or NULL
|
||||
*/
|
||||
EventHandler* GetIntRef(int fd);
|
||||
|
||||
bool BoundsCheckFd(EventHandler* eh);
|
||||
|
||||
virtual int Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen);
|
||||
|
||||
virtual int RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
|
||||
|
||||
virtual int Blocking(int fd);
|
||||
|
||||
virtual int NonBlocking(int fd);
|
||||
|
||||
virtual int GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen);
|
||||
|
||||
virtual int Close(int fd);
|
||||
|
||||
virtual int Close(EventHandler* fd);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#include "exitcodes.h"
|
||||
#include <mswsock.h>
|
||||
|
||||
@ -526,3 +753,8 @@ int IOCPEngine::Close(EventHandler* fd)
|
||||
{
|
||||
return this->Close(fd->GetFd());
|
||||
}
|
||||
|
||||
SocketEngine* CreateSocketEngine()
|
||||
{
|
||||
return new IOCPEngine;
|
||||
}
|
||||
|
@ -16,7 +16,61 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/time.h>
|
||||
#include "socketengines/socketengine_kqueue.h"
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/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 "inspircd.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/time.h>
|
||||
#include "socketengine.h"
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
|
||||
*/
|
||||
class KQueueEngine : public SocketEngine
|
||||
{
|
||||
private:
|
||||
int EngineHandle;
|
||||
/** 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
|
||||
*/
|
||||
KQueueEngine();
|
||||
/** Delete a KQueueEngine
|
||||
*/
|
||||
virtual ~KQueueEngine();
|
||||
bool AddFd(EventHandler* eh, int event_mask);
|
||||
void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
virtual void RecoverFromFork();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
KQueueEngine::KQueueEngine()
|
||||
@ -203,3 +257,8 @@ std::string KQueueEngine::GetName()
|
||||
{
|
||||
return "kqueue";
|
||||
}
|
||||
|
||||
SocketEngine* CreateSocketEngine()
|
||||
{
|
||||
return new KQueueEngine;
|
||||
}
|
||||
|
@ -13,7 +13,71 @@
|
||||
|
||||
#include "inspircd.h"
|
||||
#include "exitcodes.h"
|
||||
#include "socketengines/socketengine_poll.h"
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_POLL__
|
||||
#define __SOCKETENGINE_POLL__
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
#ifndef WINDOWS
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN /* fuck every fucking OS ever made. needed by poll.h to work.*/
|
||||
#endif
|
||||
#include <poll.h>
|
||||
#include <sys/poll.h>
|
||||
#else
|
||||
/* *grumble* */
|
||||
#define struct pollfd WSAPOLLFD
|
||||
#define poll WSAPoll
|
||||
#endif
|
||||
|
||||
class InspIRCd;
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use poll().
|
||||
*/
|
||||
class PollEngine : public SocketEngine
|
||||
{
|
||||
private:
|
||||
/** These are used by poll() to hold socket events
|
||||
*/
|
||||
struct pollfd *events;
|
||||
/** This map maps fds to an index in the events array.
|
||||
*/
|
||||
std::map<int, unsigned int> fd_mappings;
|
||||
public:
|
||||
/** Create a new PollEngine
|
||||
*/
|
||||
PollEngine();
|
||||
/** Delete a PollEngine
|
||||
*/
|
||||
virtual ~PollEngine();
|
||||
virtual bool AddFd(EventHandler* eh, int event_mask);
|
||||
virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
|
||||
virtual EventHandler* GetRef(int fd);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#include <ulimit.h>
|
||||
#ifdef __FreeBSD__
|
||||
#include <sys/sysctl.h>
|
||||
@ -225,3 +289,7 @@ std::string PollEngine::GetName()
|
||||
return "poll";
|
||||
}
|
||||
|
||||
SocketEngine* CreateSocketEngine()
|
||||
{
|
||||
return new PollEngine;
|
||||
}
|
||||
|
@ -14,7 +14,61 @@
|
||||
#include "inspircd.h"
|
||||
#include "exitcodes.h"
|
||||
#include <port.h>
|
||||
#include "socketengines/socketengine_ports.h"
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#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>
|
||||
|
||||
/** 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
|
||||
* @param Instance The creator of this object
|
||||
*/
|
||||
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 bool DelFd(EventHandler* eh, bool force = false);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
virtual void WantWrite(EventHandler* eh);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#include <ulimit.h>
|
||||
|
||||
PortsEngine::PortsEngine()
|
||||
@ -163,3 +217,7 @@ std::string PortsEngine::GetName()
|
||||
return "ports";
|
||||
}
|
||||
|
||||
SocketEngine* CreateSocketEngine()
|
||||
{
|
||||
return new PortsEngine;
|
||||
}
|
||||
|
@ -15,7 +15,52 @@
|
||||
#ifndef WINDOWS
|
||||
#include <sys/select.h>
|
||||
#endif // WINDOWS
|
||||
#include "socketengines/socketengine_select.h"
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
|
||||
* See: http://wiki.inspircd.org/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_SELECT__
|
||||
#define __SOCKETENGINE_SELECT__
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#ifndef WINDOWS
|
||||
#include <sys/select.h>
|
||||
#endif // WINDOWS
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
/** A specialisation of the SocketEngine class, designed to use traditional select().
|
||||
*/
|
||||
class SelectEngine : public SocketEngine
|
||||
{
|
||||
public:
|
||||
/** Create a new SelectEngine
|
||||
*/
|
||||
SelectEngine();
|
||||
/** Delete a SelectEngine
|
||||
*/
|
||||
virtual ~SelectEngine();
|
||||
virtual bool AddFd(EventHandler* eh, int event_mask);
|
||||
virtual bool DelFd(EventHandler* eh, bool force = false);
|
||||
void OnSetEvent(EventHandler* eh, int, int);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
SelectEngine::SelectEngine()
|
||||
@ -148,3 +193,8 @@ std::string SelectEngine::GetName()
|
||||
{
|
||||
return "select";
|
||||
}
|
||||
|
||||
SocketEngine* CreateSocketEngine()
|
||||
{
|
||||
return new SelectEngine;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user