summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <klishinm@vmware.com>2021-01-28 18:44:06 +0300
committerGitHub <noreply@github.com>2021-01-28 18:44:06 +0300
commit09660b8543eb59d642c74eaa4a61dddb6237f690 (patch)
treec7fd29af210804396b5798e63bed84caec94ee92
parentecd3df13f515e587aa7b035cb72f5c75921662ad (diff)
parent210a032eb8373eb8dad40a6f32fec65b48a5f61d (diff)
downloadrabbitmq-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.erl17
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