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@xxxxxxxxxxx > https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev > _______________________________________________ openssh-unix-dev mailing list openssh-unix-dev@xxxxxxxxxxx https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev