Commit 983c93390885090d8ab933c217e836a465d67753
1 parent
f82c178b
fix seaks and hangs after adding response object (mostly not related with the re…
…sponse object but how i integated it into serverRun
Showing
6 changed files
with
32 additions
and
21 deletions
| 1 | +2012-02-11 12:47:01 +0100 Georg Hopp | |
| 2 | + | |
| 3 | + * fix seaks and hangs after adding response object (mostly not related with the response object but how i integated it into serverRun (HEAD, master) | |
| 4 | + | |
| 1 | 5 | 2012-02-10 19:57:57 +0100 Georg Hopp |
| 2 | 6 | |
| 3 | - * started a response handler and changed serverRun to use it for its response (HEAD, master) | |
| 7 | + * started a response handler and changed serverRun to use it for its response (origin/master, origin/HEAD) | |
| 4 | 8 | |
| 5 | 9 | 2012-02-10 12:42:04 +0100 Georg Hopp |
| 6 | 10 | |
| 7 | - * fixed bug at server destructor (origin/master, origin/HEAD) | |
| 11 | + * fixed bug at server destructor | |
| 8 | 12 | |
| 9 | 13 | 2012-02-10 09:59:41 +0100 Georg Hopp |
| 10 | 14 | ... | ... |
| ... | ... | @@ -36,14 +36,14 @@ dtor(void * _this) |
| 36 | 36 | Server this = _this; |
| 37 | 37 | int i; |
| 38 | 38 | |
| 39 | - for (i=1; i<this->nfds; i++) { | |
| 40 | - /* | |
| 41 | - * @TODO do some finalization...buffer handling...etc. | |
| 42 | - */ | |
| 43 | - delete(&(this->conns[(this->fds)[i].fd]).sock); | |
| 44 | - delete(&(this->conns[(this->fds)[i].fd]).reader); | |
| 45 | - if (this->conns[(this->fds)[i].fd].wbuf) | |
| 46 | - free(this->conns[(this->fds)[i].fd].wbuf); | |
| 39 | + for (i=0; i<this->nfds; i++) { | |
| 40 | + if (this->sock->handle != (this->fds)[i].fd) { | |
| 41 | + delete(&(this->conns[(this->fds)[i].fd]).sock); | |
| 42 | + delete(&(this->conns[(this->fds)[i].fd]).reader); | |
| 43 | + | |
| 44 | + if (this->conns[(this->fds)[i].fd].wbuf) | |
| 45 | + free(this->conns[(this->fds)[i].fd].wbuf); | |
| 46 | + } | |
| 47 | 47 | } |
| 48 | 48 | |
| 49 | 49 | delete(&this->sock); | ... | ... |
| ... | ... | @@ -11,7 +11,10 @@ serverCloseConn(Server this, unsigned int i) |
| 11 | 11 | delete(&((this->conns)[fd].sock)); |
| 12 | 12 | delete(&((this->conns)[fd].reader)); |
| 13 | 13 | |
| 14 | - memset((this->conns)[fd].wbuf, 0, strlen((this->conns)[fd].wbuf)); | |
| 14 | + if ((this->conns)[fd].wbuf != NULL) { | |
| 15 | + free((this->conns)[fd].wbuf); | |
| 16 | + (this->conns)[fd].wbuf = NULL; | |
| 17 | + } | |
| 15 | 18 | (this->conns)[fd].keep_alive = 0; |
| 16 | 19 | |
| 17 | 20 | (this->fds)[i].events = 0; | ... | ... |
| ... | ... | @@ -10,7 +10,7 @@ serverRead(Server this, unsigned int i) |
| 10 | 10 | this->logger, |
| 11 | 11 | LOGGER_INFO, |
| 12 | 12 | "initialization error: NULL reader"); |
| 13 | - serverCloseConn(this, i); | |
| 13 | + return -1; | |
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | switch ((size = streamReaderRead((this->conns)[fd].reader, fd))) { |
| ... | ... | @@ -25,8 +25,10 @@ serverRead(Server this, unsigned int i) |
| 25 | 25 | /* |
| 26 | 26 | * read failure / close connection |
| 27 | 27 | */ |
| 28 | - loggerLog(this->logger, LOGGER_INFO, "connection closed..."); | |
| 29 | - serverCloseConn(this, i); | |
| 28 | + loggerLog(this->logger, LOGGER_INFO, | |
| 29 | + "connection[%d] closed...%s", | |
| 30 | + fd, | |
| 31 | + inet_ntoa((((this->conns)[fd].sock)->addr).sin_addr)); | |
| 30 | 32 | break; |
| 31 | 33 | |
| 32 | 34 | default: | ... | ... |
| ... | ... | @@ -75,13 +75,15 @@ serverRun(Server this) |
| 75 | 75 | */ |
| 76 | 76 | int size; |
| 77 | 77 | |
| 78 | - if (0 < (size=serverRead(this, i))) { | |
| 78 | + if (0 >= (size=serverRead(this, i))) { | |
| 79 | + serverCloseConn(this, i); | |
| 80 | + } | |
| 81 | + else { | |
| 79 | 82 | int j; |
| 80 | 83 | HttpRequestQueue queue = |
| 81 | 84 | ((HttpRequestParser)(this->conns)[fd].reader)->request_queue; |
| 82 | 85 | |
| 83 | 86 | for (j=0; j<queue->nrequests; j++) { |
| 84 | - HttpRequest request = queue->requests[j]; | |
| 85 | 87 | HttpResponse response; |
| 86 | 88 | |
| 87 | 89 | /** |
| ... | ... | @@ -90,20 +92,22 @@ serverRun(Server this) |
| 90 | 92 | */ |
| 91 | 93 | response = httpResponse404(); |
| 92 | 94 | |
| 93 | - if (httpRequestHasKeepAlive(request)) { | |
| 95 | + if (httpRequestHasKeepAlive(queue->requests[j])) { | |
| 96 | + (this->conns)[fd].keep_alive = 1; | |
| 94 | 97 | httpResponseHeaderSet( |
| 95 | 98 | response, |
| 96 | 99 | "Connection", |
| 97 | 100 | "Keep-Alive"); |
| 98 | 101 | } |
| 99 | 102 | else { |
| 103 | + (this->conns)[fd].keep_alive = 0; | |
| 100 | 104 | httpResponseHeaderSet( |
| 101 | 105 | response, |
| 102 | 106 | "Connection", |
| 103 | 107 | "Close"); |
| 104 | 108 | } |
| 105 | 109 | |
| 106 | - delete(&request); | |
| 110 | + delete(&(queue->requests[j])); | |
| 107 | 111 | |
| 108 | 112 | (this->conns)[fd].wbuf = calloc( |
| 109 | 113 | 1, httpResponseSizeGet(response) + 1); | ... | ... |
| ... | ... | @@ -16,13 +16,11 @@ |
| 16 | 16 | int |
| 17 | 17 | main() |
| 18 | 18 | { |
| 19 | - struct rlimit limit = {RLIM_INFINITY, RLIM_INFINITY}; | |
| 20 | - | |
| 21 | 19 | Logger logger = new(LoggerStderr, LOGGER_ERR); |
| 22 | 20 | HttpRequestParser parser = new(HttpRequestParser); |
| 23 | 21 | Server server = new(Server, logger, parser, 11212, SOMAXCONN); |
| 24 | - //Server server = new(Server, logger, parser, 11212, 20); | |
| 25 | 22 | |
| 23 | + struct rlimit limit = {RLIM_INFINITY, RLIM_INFINITY}; | |
| 26 | 24 | setrlimit(RLIMIT_CPU, &limit); |
| 27 | 25 | |
| 28 | 26 | init_signals(); | ... | ... |
Please
register
or
login
to post a comment