do not create redirect if client unexpectedly closes connection

Close the socket without creating the redirection, this client did not
successfully downloaded the image file.

Moreover, check for connection closed by client in all of the possible read
states.
master
tiptorrent development team 2021-12-21 14:19:35 +01:00
parent 7bf3eebb98
commit b18630a920
1 changed files with 7 additions and 6 deletions

View File

@ -121,8 +121,14 @@ static void tip_client_read_cb(struct ev_loop *loop, struct ev_io *io, int event
if (ret < 0) if (ret < 0)
goto close; 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); ev_timer_again(loop, &cli->timer);
}
cli->buf_len += ret; cli->buf_len += ret;
if (cli->buf_len >= sizeof(cli->buf)) { 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; break;
case TIP_CLIENT_PROCESSING_REQUEST_2: case TIP_CLIENT_PROCESSING_REQUEST_2:
case TIP_CLIENT_PROCESSING_REQUEST_3: 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", 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)); inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port));
goto close; goto close;