Commit ca023b994fcf26ec26e22d09cce494023678328d
1 parent
05a7a386
fix handling of remote close - i should have another eye on this...there still s…
…eems to be something wrong.
Showing
4 changed files
with
11 additions
and
9 deletions
@@ -10,7 +10,10 @@ serverCloseConn(Server this, unsigned int i) | @@ -10,7 +10,10 @@ serverCloseConn(Server this, unsigned int i) | ||
10 | 10 | ||
11 | delete(&((this->conns)[fd].sock)); | 11 | delete(&((this->conns)[fd].sock)); |
12 | delete(&((this->conns)[fd].reader)); | 12 | delete(&((this->conns)[fd].reader)); |
13 | + memset((this->conns)[fd].wbuf, 0, strlen((this->conns)[fd].wbuf)); | ||
13 | (this->fds)[i].events = 0; | 14 | (this->fds)[i].events = 0; |
15 | + (this->fds)[i].revents = 0; | ||
16 | + (this->fds)[i].fd = 0; | ||
14 | this->ndel++; | 17 | this->ndel++; |
15 | // CLEAR_CONN(this, i); | 18 | // CLEAR_CONN(this, i); |
16 | // this->nfds--; | 19 | // this->nfds--; |
@@ -14,14 +14,14 @@ serverHandleAccept(Server this) | @@ -14,14 +14,14 @@ serverHandleAccept(Server this) | ||
14 | //* clone reader | 14 | //* clone reader |
15 | (this->conns)[acc->handle].reader = clone(this->reader); | 15 | (this->conns)[acc->handle].reader = clone(this->reader); |
16 | 16 | ||
17 | - (this->fds)[this->nfds].fd = acc->handle; | ||
18 | - (this->fds)[this->nfds].events = POLLIN; | 17 | + (this->fds)[this->nfds].fd = acc->handle; |
18 | + (this->fds)[this->nfds].events = POLLIN; | ||
19 | this->nfds++; | 19 | this->nfds++; |
20 | } else { | 20 | } else { |
21 | delete(&acc); | 21 | delete(&acc); |
22 | } | 22 | } |
23 | 23 | ||
24 | - (this->fds)[0].revents |= POLLIN; | 24 | +// (this->fds)[0].revents |= POLLIN; |
25 | } | 25 | } |
26 | 26 | ||
27 | // vim: set ts=4 sw=4: | 27 | // vim: set ts=4 sw=4: |
@@ -3,6 +3,7 @@ int | @@ -3,6 +3,7 @@ int | ||
3 | serverRead(Server this, unsigned int i) | 3 | serverRead(Server this, unsigned int i) |
4 | { | 4 | { |
5 | int fd = (this->fds)[i].fd; | 5 | int fd = (this->fds)[i].fd; |
6 | + int size; | ||
6 | 7 | ||
7 | if (NULL == (this->conns)[fd].reader) { | 8 | if (NULL == (this->conns)[fd].reader) { |
8 | loggerLog( | 9 | loggerLog( |
@@ -12,7 +13,7 @@ serverRead(Server this, unsigned int i) | @@ -12,7 +13,7 @@ serverRead(Server this, unsigned int i) | ||
12 | serverCloseConn(this, i); | 13 | serverCloseConn(this, i); |
13 | } | 14 | } |
14 | 15 | ||
15 | - switch (streamReaderRead((this->conns)[fd].reader, fd)) { | 16 | + switch ((size = streamReaderRead((this->conns)[fd].reader, fd))) { |
16 | case 0: | 17 | case 0: |
17 | /* | 18 | /* |
18 | * normal close: write remaining data | 19 | * normal close: write remaining data |
@@ -32,7 +33,7 @@ serverRead(Server this, unsigned int i) | @@ -32,7 +33,7 @@ serverRead(Server this, unsigned int i) | ||
32 | break; | 33 | break; |
33 | } | 34 | } |
34 | 35 | ||
35 | - return 0; | 36 | + return size; |
36 | } | 37 | } |
37 | 38 | ||
38 | // vim: set ts=4 sw=4: | 39 | // vim: set ts=4 sw=4: |
@@ -65,15 +65,14 @@ serverRun(Server this) | @@ -65,15 +65,14 @@ serverRun(Server this) | ||
65 | * handle reads | 65 | * handle reads |
66 | */ | 66 | */ |
67 | else { | 67 | else { |
68 | - serverRead(this, i); | ||
69 | - | ||
70 | /** | 68 | /** |
71 | * do some other processing | 69 | * do some other processing |
72 | * @TODO: actually this will hard assume that our stream reader | 70 | * @TODO: actually this will hard assume that our stream reader |
73 | * is a http parser and it has its queue...think about more | 71 | * is a http parser and it has its queue...think about more |
74 | * generalizing here. | 72 | * generalizing here. |
75 | */ | 73 | */ |
76 | - { | 74 | + int size; |
75 | + if (0 < (size=serverRead(this, i))) { | ||
77 | int j; | 76 | int j; |
78 | HttpRequestQueue queue = | 77 | HttpRequestQueue queue = |
79 | ((HttpRequestParser)(this->conns)[fd].reader)->request_queue; | 78 | ((HttpRequestParser)(this->conns)[fd].reader)->request_queue; |
@@ -143,7 +142,6 @@ serverRun(Server this) | @@ -143,7 +142,6 @@ serverRun(Server this) | ||
143 | "write error, closing connection"); | 142 | "write error, closing connection"); |
144 | } | 143 | } |
145 | 144 | ||
146 | - (this->fds)[i].events = (this->fds)[i].events & ~POLLOUT; | ||
147 | serverCloseConn(this, i); | 145 | serverCloseConn(this, i); |
148 | } | 146 | } |
149 | else { | 147 | else { |
Please
register
or
login
to post a comment