summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Antemijczuk <pawel.antemijczuk1@motorolasolutions.com>2021-01-26 11:33:13 +0100
committerPawel Antemijczuk <pawel.antemijczuk1@motorolasolutions.com>2021-01-26 11:33:13 +0100
commit5d0aecd819334286f720b9270cdfb42fb82a27f9 (patch)
tree99e84e02b4ab45e86695f2a9acd524f14146a472
parent4f43f393bf85e5cd373c84660cc07700fa731e72 (diff)
downloadrabbitmq-server-git-5d0aecd819334286f720b9270cdfb42fb82a27f9.tar.gz
Resolve DNS until first success
-rw-r--r--deps/amqp_client/src/amqp_network_connection.erl18
1 files changed, 12 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..47d28f62aa 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,16 @@ 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 | Other]) ->
+ case inet:getaddr(Host, Family) of
+ {ok, IP} -> {IP, Family};
+ _ -> resolve_address(Host, Other)
+ end;
+resolve_address(Host, []) ->
+ {error, unknown_host}.
+
try_handshake(AmqpParams, SIF, State = #state{sock = Sock}) ->
Name = case rabbit_net:connection_string(Sock, outbound) of