Showing
4 changed files
with
22 additions
and
3 deletions
@@ -129,12 +129,28 @@ serverRun(Server this) | @@ -129,12 +129,28 @@ serverRun(Server this) | ||
129 | * handle writes | 129 | * handle writes |
130 | */ | 130 | */ |
131 | if (0 != ((this->fds)[i].revents & POLLOUT)) { | 131 | if (0 != ((this->fds)[i].revents & POLLOUT)) { |
132 | - write( | 132 | + int size; |
133 | + | ||
134 | + size = write( | ||
133 | (this->fds)[i].fd, | 135 | (this->fds)[i].fd, |
134 | (this->conns)[fd].wbuf, | 136 | (this->conns)[fd].wbuf, |
135 | strlen((this->conns)[fd].wbuf)); | 137 | strlen((this->conns)[fd].wbuf)); |
136 | - (this->fds)[i].events = (this->fds)[i].events & ~POLLOUT; | ||
137 | - serverCloseConn(this, i); | 138 | + |
139 | + if (size == strlen((this->conns)[fd].wbuf) || | ||
140 | + -1 == size) { | ||
141 | + if (-1 == size) { | ||
142 | + loggerLog(this->logger, LOGGER_ERR, | ||
143 | + "write error, closing connection"); | ||
144 | + } | ||
145 | + | ||
146 | + (this->fds)[i].events = (this->fds)[i].events & ~POLLOUT; | ||
147 | + serverCloseConn(this, i); | ||
148 | + } | ||
149 | + else { | ||
150 | + memmove((this->conns)[fd].wbuf, | ||
151 | + (this->conns)[fd].wbuf + size, | ||
152 | + strlen((this->conns)[fd].wbuf) - size + 1); | ||
153 | + } | ||
138 | } | 154 | } |
139 | } | 155 | } |
140 | } | 156 | } |
Please
register
or
login
to post a comment