Browse Source

fix seaks and hangs after adding response object (mostly not related with the response object but how i integated it into serverRun

master
Georg Hopp 14 years ago
parent
commit
983c933908
  1. 8
      ChangeLog
  2. 16
      src/server.c
  3. 5
      src/server/close_conn.c
  4. 8
      src/server/read.c
  5. 12
      src/server/run.c
  6. 4
      src/testserver.c

8
ChangeLog

@ -1,10 +1,14 @@
2012-02-11 12:47:01 +0100 Georg Hopp
* fix seaks and hangs after adding response object (mostly not related with the response object but how i integated it into serverRun (HEAD, master)
2012-02-10 19:57:57 +0100 Georg Hopp
* started a response handler and changed serverRun to use it for its response (HEAD, master)
* started a response handler and changed serverRun to use it for its response (origin/master, origin/HEAD)
2012-02-10 12:42:04 +0100 Georg Hopp
* fixed bug at server destructor (origin/master, origin/HEAD)
* fixed bug at server destructor
2012-02-10 09:59:41 +0100 Georg Hopp

16
src/server.c

@ -36,14 +36,14 @@ dtor(void * _this)
Server this = _this;
int i;
for (i=1; i<this->nfds; i++) {
/*
* @TODO do some finalization...buffer handling...etc.
*/
delete(&(this->conns[(this->fds)[i].fd]).sock);
delete(&(this->conns[(this->fds)[i].fd]).reader);
if (this->conns[(this->fds)[i].fd].wbuf)
free(this->conns[(this->fds)[i].fd].wbuf);
for (i=0; i<this->nfds; i++) {
if (this->sock->handle != (this->fds)[i].fd) {
delete(&(this->conns[(this->fds)[i].fd]).sock);
delete(&(this->conns[(this->fds)[i].fd]).reader);
if (this->conns[(this->fds)[i].fd].wbuf)
free(this->conns[(this->fds)[i].fd].wbuf);
}
}
delete(&this->sock);

5
src/server/close_conn.c

@ -11,7 +11,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));
if ((this->conns)[fd].wbuf != NULL) {
free((this->conns)[fd].wbuf);
(this->conns)[fd].wbuf = NULL;
}
(this->conns)[fd].keep_alive = 0;
(this->fds)[i].events = 0;

8
src/server/read.c

@ -10,7 +10,7 @@ serverRead(Server this, unsigned int i)
this->logger,
LOGGER_INFO,
"initialization error: NULL reader");
serverCloseConn(this, i);
return -1;
}
switch ((size = streamReaderRead((this->conns)[fd].reader, fd))) {
@ -25,8 +25,10 @@ serverRead(Server this, unsigned int i)
/*
* read failure / close connection
*/
loggerLog(this->logger, LOGGER_INFO, "connection closed...");
serverCloseConn(this, i);
loggerLog(this->logger, LOGGER_INFO,
"connection[%d] closed...%s",
fd,
inet_ntoa((((this->conns)[fd].sock)->addr).sin_addr));
break;
default:

12
src/server/run.c

@ -75,13 +75,15 @@ serverRun(Server this)
*/
int size;
if (0 < (size=serverRead(this, i))) {
if (0 >= (size=serverRead(this, i))) {
serverCloseConn(this, i);
}
else {
int j;
HttpRequestQueue queue =
((HttpRequestParser)(this->conns)[fd].reader)->request_queue;
for (j=0; j<queue->nrequests; j++) {
HttpRequest request = queue->requests[j];
HttpResponse response;
/**
@ -90,20 +92,22 @@ serverRun(Server this)
*/
response = httpResponse404();
if (httpRequestHasKeepAlive(request)) {
if (httpRequestHasKeepAlive(queue->requests[j])) {
(this->conns)[fd].keep_alive = 1;
httpResponseHeaderSet(
response,
"Connection",
"Keep-Alive");
}
else {
(this->conns)[fd].keep_alive = 0;
httpResponseHeaderSet(
response,
"Connection",
"Close");
}
delete(&request);
delete(&(queue->requests[j]));
(this->conns)[fd].wbuf = calloc(
1, httpResponseSizeGet(response) + 1);

4
src/testserver.c

@ -16,13 +16,11 @@
int
main()
{
struct rlimit limit = {RLIM_INFINITY, RLIM_INFINITY};
Logger logger = new(LoggerStderr, LOGGER_ERR);
HttpRequestParser parser = new(HttpRequestParser);
Server server = new(Server, logger, parser, 11212, SOMAXCONN);
//Server server = new(Server, logger, parser, 11212, 20);
struct rlimit limit = {RLIM_INFINITY, RLIM_INFINITY};
setrlimit(RLIMIT_CPU, &limit);
init_signals();

Loading…
Cancel
Save