From: Dr. David von Oheimb Date: Wed, 27 May 2020 10:16:53 +0000 (+0200) Subject: Make BIO_do_connect() and friends handle multiple IP addresses X-Git-Tag: openssl-3.0.0-alpha3~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc18e4ddfbd55b738dd7ccd9347accf6c5b342f6;p=thirdparty%2Fopenssl.git Make BIO_do_connect() and friends handle multiple IP addresses Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/11971) --- diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index d3bd33e9578..31a5b58b7d0 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);