diff --git a/src/server/close_conn.c b/src/server/close_conn.c index 00b8b5c..bb53082 100644 --- a/src/server/close_conn.c +++ b/src/server/close_conn.c @@ -10,7 +10,10 @@ serverCloseConn(Server this, unsigned int i) delete(&((this->conns)[fd].sock)); delete(&((this->conns)[fd].reader)); + memset((this->conns)[fd].wbuf, 0, strlen((this->conns)[fd].wbuf)); (this->fds)[i].events = 0; + (this->fds)[i].revents = 0; + (this->fds)[i].fd = 0; this->ndel++; // CLEAR_CONN(this, i); // this->nfds--; diff --git a/src/server/handle_accept.c b/src/server/handle_accept.c index a86ab13..9db85fb 100644 --- a/src/server/handle_accept.c +++ b/src/server/handle_accept.c @@ -14,14 +14,14 @@ serverHandleAccept(Server this) //* clone reader (this->conns)[acc->handle].reader = clone(this->reader); - (this->fds)[this->nfds].fd = acc->handle; - (this->fds)[this->nfds].events = POLLIN; + (this->fds)[this->nfds].fd = acc->handle; + (this->fds)[this->nfds].events = POLLIN; this->nfds++; } else { delete(&acc); } - (this->fds)[0].revents |= POLLIN; +// (this->fds)[0].revents |= POLLIN; } // vim: set ts=4 sw=4: diff --git a/src/server/read.c b/src/server/read.c index fc00c27..83ef47a 100644 --- a/src/server/read.c +++ b/src/server/read.c @@ -3,6 +3,7 @@ int serverRead(Server this, unsigned int i) { int fd = (this->fds)[i].fd; + int size; if (NULL == (this->conns)[fd].reader) { loggerLog( @@ -12,7 +13,7 @@ serverRead(Server this, unsigned int i) serverCloseConn(this, i); } - switch (streamReaderRead((this->conns)[fd].reader, fd)) { + switch ((size = streamReaderRead((this->conns)[fd].reader, fd))) { case 0: /* * normal close: write remaining data @@ -32,7 +33,7 @@ serverRead(Server this, unsigned int i) break; } - return 0; + return size; } // vim: set ts=4 sw=4: diff --git a/src/server/run.c b/src/server/run.c index 1b0189d..e4f6207 100644 --- a/src/server/run.c +++ b/src/server/run.c @@ -65,15 +65,14 @@ serverRun(Server this) * handle reads */ else { - serverRead(this, i); - /** * do some other processing * @TODO: actually this will hard assume that our stream reader * is a http parser and it has its queue...think about more * generalizing here. */ - { + int size; + if (0 < (size=serverRead(this, i))) { int j; HttpRequestQueue queue = ((HttpRequestParser)(this->conns)[fd].reader)->request_queue; @@ -143,7 +142,6 @@ serverRun(Server this) "write error, closing connection"); } - (this->fds)[i].events = (this->fds)[i].events & ~POLLOUT; serverCloseConn(this, i); } else {