diff options
author | Adam <Adam@anope.org> | 2011-08-28 21:30:49 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-09-10 02:05:02 -0400 |
commit | c6d3fbdfabefc7b12ccb0810083e4108d28b5182 (patch) | |
tree | 1619d0e6dfb0c0dfb4932a3785d73bcb283be2f9 /src/socketengines/socketengine_epoll.cpp | |
parent | 700a585b1bb38a9dc0ac3e749083250d405488f8 (diff) |
Added kqueue
Diffstat (limited to 'src/socketengines/socketengine_epoll.cpp')
-rw-r--r-- | src/socketengines/socketengine_epoll.cpp | 15 |
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; |