summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Majkowski <majek@lshift.net>2010-02-25 16:12:06 +0000
committerMarek Majkowski <majek@lshift.net>2010-02-25 16:12:06 +0000
commitd7104dcfe1350c9b590b616b4dc0094bbd5f013c (patch)
tree7f435d47d95bf1b34a4a40699043178424f17aa6
parent676ba194422f61cc1e1ad43c681977b5c569110a (diff)
downloadrabbitmq-server-bug22397.tar.gz
don't use inet:getaddr, try to use inet_parse:addressbug22397
-rw-r--r--src/rabbit_networking.erl28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index cf04f05b..e4e3d134 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -117,15 +117,25 @@ start() ->
transient, infinity, supervisor, [tcp_client_sup]}),
ok.
+getaddr(Host) ->
+ % inet_parse:address takes care of ip string, like "0.0.0.0"
+ % inet:getaddr returns immediately for ip tuple {0,0,0,0},
+ % and runs 'inet_gethost' port process for dns lookups.
+ % On Windows inet:getaddr runs dns resolver for ip string, which may fail.
+ case inet_parse:address(Host) of
+ {ok, IPAddress1} -> IPAddress1;
+ {error, _} ->
+ case inet:getaddr(Host, inet) of
+ {ok, IPAddress2} -> IPAddress2;
+ {error, Reason} ->
+ error_logger:error_msg("invalid host ~p - ~p~n",
+ [Host, Reason]),
+ throw({error, {invalid_host, Host, Reason}})
+ end
+ end.
+
check_tcp_listener_address(NamePrefix, Host, Port) ->
- IPAddress =
- case inet:getaddr(Host, inet) of
- {ok, IPAddress1} -> IPAddress1;
- {error, Reason} ->
- error_logger:error_msg("invalid host ~p - ~p~n",
- [Host, Reason]),
- throw({error, {invalid_host, Host, Reason}})
- end,
+ IPAddress = getaddr(Host),
if is_integer(Port) andalso (Port >= 0) andalso (Port =< 65535) -> ok;
true -> error_logger:error_msg("invalid port ~p - not 0..65535~n",
[Port]),
@@ -157,7 +167,7 @@ start_listener(Host, Port, Label, OnConnect) ->
ok.
stop_tcp_listener(Host, Port) ->
- {ok, IPAddress} = inet:getaddr(Host, inet),
+ IPAddress = getaddr(Host),
Name = rabbit_misc:tcp_name(rabbit_tcp_listener_sup, IPAddress, Port),
ok = supervisor:terminate_child(rabbit_sup, Name),
ok = supervisor:delete_child(rabbit_sup, Name),