From f62de63955ff77e800360eb140f108b5d2c6c075 Mon Sep 17 00:00:00 2001 From: brain Date: Mon, 19 Dec 2005 18:32:09 +0000 Subject: Design flaw my ass. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2580 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/module-doc/socketengine_8cpp-source.html | 219 -------------------------- 1 file changed, 219 deletions(-) delete mode 100644 docs/module-doc/socketengine_8cpp-source.html (limited to 'docs/module-doc/socketengine_8cpp-source.html') diff --git a/docs/module-doc/socketengine_8cpp-source.html b/docs/module-doc/socketengine_8cpp-source.html deleted file mode 100644 index a972f3b29..000000000 --- a/docs/module-doc/socketengine_8cpp-source.html +++ /dev/null @@ -1,219 +0,0 @@ - - -InspIRCd: socketengine.cpp Source File - - - -
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members
- -

socketengine.cpp

Go to the documentation of this file.
00001 /*       +------------------------------------+
-00002  *       | Inspire Internet Relay Chat Daemon |
-00003  *       +------------------------------------+
-00004  *
-00005  *  Inspire is copyright (C) 2002-2005 ChatSpike-Dev.
-00006  *                       E-mail:
-00007  *                <brain@chatspike.net>
-00008  *                <Craig@chatspike.net>
-00009  *
-00010  * Written by Craig Edwards, Craig McLure, and others.
-00011  * This program is free but copyrighted software; see
-00012  *            the file COPYING for details.
-00013  *
-00014  * ---------------------------------------------------
-00015  */
-00016 
-00017 #include "inspircd_config.h"
-00018 #include "globals.h"
-00019 #include "inspircd.h"
-00020 #ifdef USE_EPOLL
-00021 #include <sys/epoll.h>
-00022 #define EP_DELAY 5
-00023 #endif
-00024 #ifdef USE_KQUEUE
-00025 #include <sys/types.h>
-00026 #include <sys/event.h>
-00027 #include <sys/time.h>
-00028 #endif
-00029 #include <vector>
-00030 #include <string>
-00031 #include "socketengine.h"
-00032 
-00033 char ref[65535];
-00034 
-00035 SocketEngine::SocketEngine()
-00036 {
-00037         log(DEBUG,"SocketEngine::SocketEngine()");
-00038 #ifdef USE_EPOLL
-00039         EngineHandle = epoll_create(65535);
-00040 #endif
-00041 #ifdef USE_KQUEUE
-00042         EngineHandle = kqueue();
-00043 #endif
-00044 }
-00045 
-00046 SocketEngine::~SocketEngine()
-00047 {
-00048         log(DEBUG,"SocketEngine::~SocketEngine()");
-00049 #ifdef USE_EPOLL
-00050         close(EngineHandle);
-00051 #endif
-00052 #ifdef USE_KQUEUE
-00053         close(EngineHandle);
-00054 #endif
-00055 }
-00056 
-00057 char SocketEngine::GetType(int fd)
-00058 {
-00059         if ((fd < 0) || (fd > 65535))
-00060                 return X_EMPTY_SLOT;
-00061         /* Mask off the top bit used for 'read/write' state */
-00062         return (ref[fd] & ~0x80);
-00063 }
-00064 
-00065 bool SocketEngine::AddFd(int fd, bool readable, char type)
-00066 {
-00067         if ((fd < 0) || (fd > 65535))
-00068                 return false;
-00069         this->fds.push_back(fd);
-00070         ref[fd] = type;
-00071         if (readable)
-00072         {
-00073                 log(DEBUG,"Set readbit");
-00074                 ref[fd] |= X_READBIT;
-00075         }
-00076         log(DEBUG,"Add socket %d",fd);
-00077 #ifdef USE_EPOLL
-00078         struct epoll_event ev;
-00079         log(DEBUG,"epoll: Add socket to events, ep=%d socket=%d",EngineHandle,fd);
-00080         readable ? ev.events = EPOLLIN | EPOLLET : ev.events = EPOLLOUT | EPOLLET;
-00081         ev.data.fd = fd;
-00082         int i = epoll_ctl(EngineHandle, EPOLL_CTL_ADD, fd, &ev);
-00083         if (i < 0)
-00084         {
-00085                 log(DEBUG,"epoll: List insertion failure!");
-00086                 return false;
-00087         }
-00088 #endif
-00089 #ifdef USE_KQUEUE
-00090         struct kevent ke;
-00091         log(DEBUG,"kqueue: Add socket to events, kq=%d socket=%d",EngineHandle,fd);
-00092         EV_SET(&ke, fd, readable ? EVFILT_READ : EVFILT_WRITE, EV_ADD, 0, 0, NULL);
-00093         int i = kevent(EngineHandle, &ke, 1, 0, 0, NULL);
-00094         if (i == -1)
-00095         {
-00096                 log(DEBUG,"kqueue: List insertion failure!");
-00097                 return false;
-00098         }
-00099 #endif
-00100 return true;
-00101 }
-00102 
-00103 bool SocketEngine::DelFd(int fd)
-00104 {
-00105         log(DEBUG,"SocketEngine::DelFd(%d)",fd);
-00106 
-00107         if ((fd < 0) || (fd > 65535))
-00108                 return false;
-00109 
-00110         bool found = false;
-00111         for (std::vector<int>::iterator i = fds.begin(); i != fds.end(); i++)
-00112         {
-00113                 if (*i == fd)
-00114                 {
-00115                         fds.erase(i);
-00116                         log(DEBUG,"Deleted fd %d",fd);
-00117                         found = true;
-00118                         break;
-00119                 }
-00120         }
-00121 #ifdef USE_KQUEUE
-00122         struct kevent ke;
-00123         EV_SET(&ke, fd, ref[fd] & X_READBIT ? EVFILT_READ : EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
-00124         int i = kevent(EngineHandle, &ke, 1, 0, 0, NULL);
-00125         if (i == -1)
-00126         {
-00127                 log(DEBUG,"kqueue: Failed to remove socket from queue!");
-00128                 return false;
-00129         }
-00130 #endif
-00131 #ifdef USE_EPOLL
-00132         struct epoll_event ev;
-00133         ref[fd] && X_READBIT ? ev.events = EPOLLIN | EPOLLET : ev.events = EPOLLOUT | EPOLLET;
-00134         ev.data.fd = fd;
-00135         int i = epoll_ctl(EngineHandle, EPOLL_CTL_DEL, fd, &ev);
-00136         if (i < 0)
-00137         {
-00138                 log(DEBUG,"epoll: List deletion failure!");
-00139                 return false;
-00140         }
-00141 #endif
-00142         ref[fd] = 0;
-00143         return found;
-00144 }
-00145 
-00146 bool SocketEngine::Wait(std::vector<int> &fdlist)
-00147 {
-00148         fdlist.clear();
-00149 #ifdef USE_SELECT
-00150         FD_ZERO(&wfdset);
-00151         FD_ZERO(&rfdset);
-00152         timeval tval;
-00153         int sresult;
-00154         for (unsigned int a = 0; a < fds.size(); a++)
-00155         {
-00156                 if (ref[fds[a]] & X_READBIT)
-00157                 {
-00158                         FD_SET (fds[a], &rfdset);
-00159                 }
-00160                 else
-00161                 {
-00162                         FD_SET (fds[a], &wfdset);
-00163                 }
-00164                 
-00165         }
-00166         tval.tv_sec = 0;
-00167         tval.tv_usec = 100L;
-00168         sresult = select(FD_SETSIZE, &rfdset, &wfdset, NULL, &tval);
-00169         if (sresult > 0)
-00170         {
-00171                 for (unsigned int a = 0; a < fds.size(); a++)
-00172                 {
-00173                         if ((FD_ISSET (fds[a], &rfdset)) || (FD_ISSET (fds[a], &wfdset)))
-00174                                 fdlist.push_back(fds[a]);
-00175                 }
-00176         }
-00177 #endif
-00178 #ifdef USE_KQUEUE
-00179         ts.tv_nsec = 10000L;
-00180         ts.tv_sec = 0;
-00181         int i = kevent(EngineHandle, NULL, 0, &ke_list[0], 65535, &ts);
-00182         for (int j = 0; j < i; j++)
-00183                 fdlist.push_back(ke_list[j].ident);
-00184 #endif
-00185 #ifdef USE_EPOLL
-00186         int i = epoll_wait(EngineHandle, events, 65535, 100);
-00187         for (int j = 0; j < i; j++)
-00188                 fdlist.push_back(events[j].data.fd);
-00189 #endif
-00190         return true;
-00191 }
-00192 
-00193 std::string SocketEngine::GetName()
-00194 {
-00195 #ifdef USE_SELECT
-00196         return "select";
-00197 #endif
-00198 #ifdef USE_KQUEUE
-00199         return "kqueue";
-00200 #endif
-00201 #ifdef USE_EPOLL
-00202         return "epoll";
-00203 #endif
-00204         return "misconfigured";
-00205 }
-

Generated on Mon Dec 19 18:05:20 2005 for InspIRCd by  - -doxygen 1.4.4-20050815
- - -- cgit v1.3.1-10-gc9f91