[BUG] Healthchecks: get a proper error code if connection cannot be completed immediately

In case of a non-blocking socket, used for connecting to a remote
server (not localhost), the error reported by the health check
was most of a time one of EINPROGRESS/EAGAIN/EALREADY.

This patch adds a getsockopt(..., SO_ERROR, ...) call so now
the proper error message is reported.
This commit is contained in:
Krzysztof Piotr Oledzki 2010-01-02 22:03:01 +01:00 committed by Willy Tarreau
parent a9679ac94b
commit 6492db5453

View File

@ -651,7 +651,13 @@ static int event_srv_chk_w(int fd)
//fprintf(stderr, "event_srv_chk_w, state=%ld\n", unlikely(fdtab[fd].state));
if (unlikely(fdtab[fd].state == FD_STERROR || (fdtab[fd].ev & FD_POLL_ERR))) {
set_server_check_status(s, HCHK_STATUS_L4CON, strerror(errno));
int skerr, err = errno;
socklen_t lskerr = sizeof(skerr);
if (!getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr) && skerr)
err = skerr;
set_server_check_status(s, HCHK_STATUS_L4CON, strerror(err));
goto out_error;
}