[PATCH] Enable ConnectTimeout with ConnectionAttempts

Damien Miller djm at mindrot.org
Fri Dec 14 13:32:28 AEDT 2018


On Sun, 9 Dec 2018, Michihito Shigemura wrote:

> Fix bug ConnectTimeout=N only works on the first ConnectionAttempts
> https://bugzilla.mindrot.org/show_bug.cgi?id=2918

Thanks for the reminder :)

ConnectTimeout is supposed to apply to both the initial TCP connection
and the subsequent banner exchange. This is done to allow it to detect
servers (or middleboxes) that accept the connection but never return
a banner.

This diff seems to make the connect timeout apply independently to each
TCP connection and then whatever is left of the timeout interval to be
applied to banner exchange. Is that correct?

If so, IMO it's a reasonable compromise between two fairly conflictual
options...

>  sshconnect.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/sshconnect.c b/sshconnect.c
> index 4862da5e..b837a83a 100644
> --- a/sshconnect.c
> +++ b/sshconnect.c
> @@ -454,11 +454,12 @@ waitrfd(int fd, int *timeoutp)
>  {
>  	struct pollfd pfd;
>  	struct timeval t_start;
> -	int oerrno, r;
> +	int oerrno, r, next_timeout;
>  
>  	monotime_tv(&t_start);
>  	pfd.fd = fd;
>  	pfd.events = POLLIN;
> +	next_timeout = *timeoutp;
>  	for (; *timeoutp >= 0;) {
>  		r = poll(&pfd, 1, *timeoutp);
>  		oerrno = errno;
> @@ -473,6 +474,7 @@ waitrfd(int fd, int *timeoutp)
>  	}
>  	/* timeout */
>  	errno = ETIMEDOUT;
> +	*timeoutp = next_timeout;
>  	return -1;
>  }
>  
> -- 
> 2.19.2
> 
> _______________________________________________
> openssh-unix-dev mailing list
> openssh-unix-dev at mindrot.org
> https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev
> 


More information about the openssh-unix-dev mailing list