]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengine_epoll.cpp
Some AddMode fixes
[user/henk/code/inspircd.git] / src / socketengine_epoll.cpp
index 8f346cf3a03c14b2a7354a5f47f407cf06f05c1f..ec5362f8cfbd126778dae547bc630ec8cb518f3f 100644 (file)
@@ -22,25 +22,28 @@ EPollEngine::EPollEngine(InspIRCd* Instance) : SocketEngine(Instance)
 
        if (EngineHandle == -1)
        {
-               ServerInstance->Log(SPARSE,"ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features.");
-               ServerInstance->Log(SPARSE,"ERROR: this is a fatal error, exiting now.");
-               printf("ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features.");
-               printf("ERROR: this is a fatal error, exiting now.");
-               InspIRCd::Exit(EXIT_STATUS_SOCKETENGINE);
+               ServerInstance->Log(SPARSE,"ERROR: Could not initialize socket engine: %s", strerror(errno));
+               ServerInstance->Log(SPARSE,"ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now.");
+               printf("ERROR: Could not initialize socket engine: %s\n", strerror(errno));
+               printf("ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now.\n");
+               ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
        }
        CurrentSetSize = 0;
 }
 
 EPollEngine::~EPollEngine()
 {
-       close(EngineHandle);
+       this->Close(EngineHandle);
 }
 
 bool EPollEngine::AddFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
        if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+       {
+               ServerInstance->Log(DEBUG,"Out of range FD");
                return false;
+       }
 
        if (GetRemainingFds() <= 1)
                return false;
@@ -48,7 +51,6 @@ bool EPollEngine::AddFd(EventHandler* eh)
        if (ref[fd])
                return false;
 
-       ref[fd] = eh;
        struct epoll_event ev;
        memset(&ev,0,sizeof(struct epoll_event));
        eh->Readable() ? ev.events = EPOLLIN : ev.events = EPOLLOUT;
@@ -60,6 +62,8 @@ bool EPollEngine::AddFd(EventHandler* eh)
        }
 
        ServerInstance->Log(DEBUG,"New file descriptor: %d", fd);
+
+       ref[fd] = eh;
        CurrentSetSize++;
        return true;
 }
@@ -89,10 +93,13 @@ bool EPollEngine::DelFd(EventHandler* eh, bool force)
        int i = epoll_ctl(EngineHandle, EPOLL_CTL_DEL, fd, &ev);
 
        if (i < 0 && !force)
+       {
+               ServerInstance->Log(DEBUG,"Cant remove socket: %s", strerror(errno));
                return false;
+       }
 
-       CurrentSetSize--;
        ref[fd] = NULL;
+       CurrentSetSize--;
 
        ServerInstance->Log(DEBUG,"Remove file descriptor: %d", fd);
        return true;