From: Olivier Houchard Date: Thu, 6 Apr 2017 12:45:14 +0000 (+0200) Subject: MINOR: socket transfer: Set a timeout on the socket. X-Git-Tag: v1.8-dev2~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=547408787ffe1c03b975e94f01b64492d15ca97d;p=thirdparty%2Fhaproxy.git MINOR: socket transfer: Set a timeout on the socket. Make sure we're not stuck forever by setting a timeout on the socket. --- diff --git a/src/cli.c b/src/cli.c index 20e143b965..55baee3928 100644 --- a/src/cli.c +++ b/src/cli.c @@ -1025,6 +1025,7 @@ static int _getsocks(char **args, struct appctx *appctx, void *private) struct connection *remote = objt_conn(si_opposite(si)->end); struct msghdr msghdr; struct iovec iov; + struct timeval tv = { .tv_sec = 1, .tv_usec = 0 }; int *tmpfd; int tot_fd_nb = 0; struct proxy *px; @@ -1049,6 +1050,7 @@ static int _getsocks(char **args, struct appctx *appctx, void *private) Warning("Cannot make the unix socket blocking\n"); goto out; } + setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (void *)&tv, sizeof(tv)); iov.iov_base = &tot_fd_nb; iov.iov_len = sizeof(tot_fd_nb); if (!cli_has_level(appctx, ACCESS_LVL_ADMIN)) diff --git a/src/haproxy.c b/src/haproxy.c index 01969c90d1..2b1db00b48 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -574,6 +574,7 @@ static int get_old_sockets(const char *unixsocket) struct msghdr msghdr; struct iovec iov; struct xfer_sock_list *xfer_sock = NULL; + struct timeval tv = { .tv_sec = 1, .tv_usec = 0 }; int sock = -1; int ret = -1; int ret2 = -1; @@ -603,6 +604,7 @@ static int get_old_sockets(const char *unixsocket) unixsocket); goto out; } + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (void *)&tv, sizeof(tv)); iov.iov_base = &fd_nb; iov.iov_len = sizeof(fd_nb); msghdr.msg_iov = &iov;