[BUG] checks: don't report an error when recv() returns an error after data

This happens when a server immediately closes the connection after
the response without lingering or when we close before the end of
the data. We get an RST which translates into a late error. We must
not declare an error without checking that the contents are OK.
This commit is contained in:
Willy Tarreau 2010-03-16 20:55:43 +01:00
parent 2c7ace07ad
commit c1a07960a6

View File

@ -898,10 +898,17 @@ static int event_srv_chk_r(int fd)
fdtab[fd].ev &= ~FD_POLL_IN;
return 0;
}
/* network error, report it */
if (!(s->result & SRV_CHK_ERROR))
set_server_check_status(s, HCHK_STATUS_SOCKERR, NULL);
goto out_wakeup;
/* Report network errors only if we got no other data. Otherwise
* we'll let the upper layers decide whether the response is OK
* or not. It is very common that an RST sent by the server is
* reported as an error just after the last data chunk.
*/
if (!s->check_data_len) {
if (!(s->result & SRV_CHK_ERROR))
set_server_check_status(s, HCHK_STATUS_SOCKERR, NULL);
goto out_wakeup;
}
}
/* Full response received.