summaryrefslogtreecommitdiff
path: root/src/socketengines/socketengine_epoll.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-08-28 21:30:49 -0400
committerAdam <Adam@anope.org>2011-09-10 02:05:02 -0400
commitc6d3fbdfabefc7b12ccb0810083e4108d28b5182 (patch)
tree1619d0e6dfb0c0dfb4932a3785d73bcb283be2f9 /src/socketengines/socketengine_epoll.cpp
parent700a585b1bb38a9dc0ac3e749083250d405488f8 (diff)
Added kqueue
Diffstat (limited to 'src/socketengines/socketengine_epoll.cpp')
-rw-r--r--src/socketengines/socketengine_epoll.cpp15
1 files changed, 3 insertions, 12 deletions
diff --git a/src/socketengines/socketengine_epoll.cpp b/src/socketengines/socketengine_epoll.cpp
index 73f7e10d6..07a033f02 100644
--- a/src/socketengines/socketengine_epoll.cpp
+++ b/src/socketengines/socketengine_epoll.cpp
@@ -124,13 +124,13 @@ void SocketEngine::Process()
continue;
Socket *s = it->second;
- if (s->HasFlag(SF_DEAD))
- continue;
-
if (ev->events & (EPOLLHUP | EPOLLERR))
{
+ socklen_t sz = sizeof(errno);
+ getsockopt(s->GetFD(), SOL_SOCKET, SO_ERROR, &errno, &sz);
s->ProcessError();
s->SetFlag(SF_DEAD);
+ delete s;
continue;
}
@@ -142,15 +142,6 @@ void SocketEngine::Process()
if ((ev->events & EPOLLOUT) && !s->ProcessWrite())
s->SetFlag(SF_DEAD);
- }
-
- for (int i = 0; i < total; ++i)
- {
- epoll_event *ev = &events[i];
- std::map<int, Socket *>::iterator it = Sockets.find(ev->data.fd);
- if (it == Sockets.end())
- continue;
- Socket *s = it->second;
if (s->HasFlag(SF_DEAD))
delete s;