diff options
author | Michael Klishin <klishinm@vmware.com> | 2021-01-28 18:44:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 18:44:06 +0300 |
commit | 09660b8543eb59d642c74eaa4a61dddb6237f690 (patch) | |
tree | c7fd29af210804396b5798e63bed84caec94ee92 | |
parent | ecd3df13f515e587aa7b035cb72f5c75921662ad (diff) | |
parent | 210a032eb8373eb8dad40a6f32fec65b48a5f61d (diff) | |
download | rabbitmq-server-git-09660b8543eb59d642c74eaa4a61dddb6237f690.tar.gz |
Merge pull request #2763 from rabbitmq/mk-erlang-client-2750
[amqp_client] Resolve DNS until first success
-rw-r--r-- | deps/amqp_client/src/amqp_network_connection.erl | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/deps/amqp_client/src/amqp_network_connection.erl b/deps/amqp_client/src/amqp_network_connection.erl index fd8b960b47..f6cae71b93 100644 --- a/deps/amqp_client/src/amqp_network_connection.erl +++ b/deps/amqp_client/src/amqp_network_connection.erl @@ -108,9 +108,8 @@ info_keys() -> connect(AmqpParams = #amqp_params_network{host = Host}, SIF, TypeSup, State) -> case gethostaddr(Host) of - [] -> {error, unknown_host}; - [AF|_] -> do_connect( - AF, AmqpParams, SIF, State#state{type_sup = TypeSup}) + {error, Reason} -> {error, Reason}; + AF -> do_connect(AF, AmqpParams, SIF, State#state{type_sup = TypeSup}) end. do_connect({Addr, Family}, @@ -163,9 +162,15 @@ inet_address_preference() -> end. gethostaddr(Host) -> - Lookups = [{Family, inet:getaddr(Host, Family)} - || Family <- inet_address_preference()], - [{IP, Family} || {Family, {ok, IP}} <- Lookups]. + resolve_address(Host, inet_address_preference()). + +resolve_address(Host, [Family | Remaining]) -> + case inet:getaddr(Host, Family) of + {ok, IP} -> {IP, Family}; + _ -> resolve_address(Host, Remaining) + end; +resolve_address(_Host, []) -> + {error, unknown_host}. try_handshake(AmqpParams, SIF, State = #state{sock = Sock}) -> Name = case rabbit_net:connection_string(Sock, outbound) of |