diff options
author | Dr. David von Oheimb <David.von.Oheimb@siemens.com> | 2020-05-27 12:16:53 +0200 |
---|---|---|
committer | Dr. David von Oheimb <David.von.Oheimb@siemens.com> | 2020-06-01 09:23:54 +0200 |
commit | dc18e4ddfbd55b738dd7ccd9347accf6c5b342f6 (patch) | |
tree | 589d2d8bd0de03e9eb0006c41243b8b12268502a /crypto | |
parent | 60d3b5b9ffb8c1273af0cc0338ec1c98f464f4b1 (diff) |
Make BIO_do_connect() and friends handle multiple IP addresses
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/11971)
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/bio/bss_conn.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index d3bd33e957..31a5b58b7d 100644 --- a/crypto/bio/bss_conn.c +++ b/crypto/bio/bss_conn.c @@ -188,8 +188,17 @@ static int conn_state(BIO *b, BIO_CONNECT *c) case BIO_CONN_S_BLOCKED_CONNECT: i = BIO_sock_error(b->num); - if (i) { + if (i != 0) { BIO_clear_retry_flags(b); + if ((c->addr_iter = BIO_ADDRINFO_next(c->addr_iter)) != NULL) { + /* + * if there are more addresses to try, do that first + */ + BIO_closesocket(b->num); + c->state = BIO_CONN_S_CREATE_SOCKET; + ERR_clear_error(); + break; + } ERR_raise_data(ERR_LIB_SYS, i, "calling connect(%s, %s)", c->param_hostname, c->param_service); |