From 85a33ab3fd63edfa68184c3b6e666b7072d74268 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Tue, 3 Sep 2013 22:37:25 +0100 Subject: [PATCH] I think the problem with keep-alive and concurrency is fixed...the handling in serverRun was still not ok for the non blocking sockets. --- src/server/run.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/server/run.c b/src/server/run.c index 7bab40e..43f2d0a 100644 --- a/src/server/run.c +++ b/src/server/run.c @@ -50,7 +50,6 @@ serverRun(Server this) */ if (0 != ((this->fds)[0].revents & POLLIN)) { if (-1 == serverHandleAccept(this, 0)) { - (this->fds)[0].revents &= ~POLLIN; events--; } } @@ -60,7 +59,6 @@ serverRun(Server this) */ if (0 != ((this->fds)[1].revents & POLLIN)) { if (-1 == serverHandleAccept(this, 1)) { - (this->fds)[1].revents &= ~POLLIN; events--; } } @@ -72,20 +70,14 @@ serverRun(Server this) if (0 != ((this->fds)[i].revents & POLLIN)) { ssize_t processed = serverRead(this, i); - // don't poll this one until I say. - (this->fds)[i].events &= ~POLLIN; - if (0 > processed) { events--; switch (processed) { - case -1: // poll me again - (this->fds)[i].events |= POLLIN; - (this->fds)[i].revents &= ~POLLIN; - break; - case -2: // close me... serverCloseConn(this, i); + + case -1: // poll me again break; } } @@ -101,8 +93,6 @@ serverRun(Server this) if (0 != ((this->fds)[i].revents & POLLOUT)) { ssize_t remaining = serverWrite(this, i); - (this->fds)[i].events &= ~POLLOUT; - if (0 >= remaining) { /* * 0 means queue was empty...try again next @@ -113,19 +103,20 @@ serverRun(Server this) events--; switch (remaining) { - case -1: // poll me again - (this->fds)[i].events |= POLLOUT; - (this->fds)[i].revents &= ~POLLOUT; + case 0: // nothing more to write stop polling + (this->fds)[i].events &= ~POLLOUT; break; case -2: // close me... serverCloseConn(this, i); + + case -1: // poll me again break; } } } - if (0 > events) + if (0 >= events) break; // no more events to handle } }