In case of connection errors before and during the handshake,
net_select_result is retrying with the next address of the server. It
however was immediately going to the last address as it was not
checking the return value of try_connect for all intermediate
addresses.
int err = errno;
if (s->addr) {
plug_log(s->plug, 1, s->addr, s->port, strerror(err), err);
- while (s->addr && sk_nextaddr(s->addr, &s->step)) {
+ while (err && s->addr && sk_nextaddr(s->addr, &s->step)) {
err = try_connect(s);
}
}
if (s->addr) {
plug_log(s->plug, 1, s->addr, s->port,
winsock_error_string(err), err);
- while (s->addr && sk_nextaddr(s->addr, &s->step)) {
+ while (err && s->addr && sk_nextaddr(s->addr, &s->step)) {
err = try_connect(s);
}
}