summaryrefslogtreecommitdiff
path: root/src/socketengines/socketengine_poll.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/socketengines/socketengine_poll.cpp')
-rw-r--r--src/socketengines/socketengine_poll.cpp15
1 files changed, 3 insertions, 12 deletions
diff --git a/src/socketengines/socketengine_poll.cpp b/src/socketengines/socketengine_poll.cpp
index ba111659a..07e150d84 100644
--- a/src/socketengines/socketengine_poll.cpp
+++ b/src/socketengines/socketengine_poll.cpp
@@ -142,13 +142,13 @@ void SocketEngine::Process()
continue;
Socket *s = it->second;
- if (s->HasFlag(SF_DEAD))
- continue;
-
if (ev->revents & (POLLERR | POLLRDHUP))
{
+ socklen_t sz = sizeof(errno);
+ getsockopt(s->GetFD(), SOL_SOCKET, SO_ERROR, &errno, &sz);
s->ProcessError();
s->SetFlag(SF_DEAD);
+ delete s;
continue;
}
@@ -160,15 +160,6 @@ void SocketEngine::Process()
if ((ev->revents & POLLOUT) && !s->ProcessWrite())
s->SetFlag(SF_DEAD);
- }
-
- for (int i = 0; i < SocketCount; ++i)
- {
- pollfd *ev = &events[i];
- std::map<int, Socket *>::iterator it = Sockets.find(ev->fd);
- if (it == Sockets.end())
- continue;
- Socket *s = it->second;
if (s->HasFlag(SF_DEAD))
delete s;