diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -121,8 +121,14 @@ static void tip_client_read_cb(struct ev_loop *loop, struct ev_io *io, int event if (ret < 0) goto close; - if (cli->state != TIP_CLIENT_CLOSE_WAIT) + if (cli->state != TIP_CLIENT_CLOSE_WAIT) { + if (ret == 0) { + syslog(LOG_ERR, "client %s:%hu unexpectedly closes connection\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); + goto close; + } ev_timer_again(loop, &cli->timer); + } cli->buf_len += ret; if (cli->buf_len >= sizeof(cli->buf)) { @@ -168,11 +174,6 @@ static void tip_client_read_cb(struct ev_loop *loop, struct ev_io *io, int event break; case TIP_CLIENT_PROCESSING_REQUEST_2: case TIP_CLIENT_PROCESSING_REQUEST_3: - if (ret == 0) { - syslog(LOG_ERR, "client %s:%hu unexpectedly closes connection\n", - inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); - goto shutdown; - } syslog(LOG_ERR, "unexpected read from client %s:%hu while in write state\n", inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); goto close; |