diff options
| -rw-r--r-- | src/rabbit_prelaunch.erl | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl index 13455abb0a..c8200d472d 100644 --- a/src/rabbit_prelaunch.erl +++ b/src/rabbit_prelaunch.erl @@ -113,10 +113,20 @@ dist_port_use_check(NodeHost) -> case os:getenv("RABBITMQ_DIST_PORT") of false -> ok; PortStr -> Port = list_to_integer(PortStr), - case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of - {ok, Sock} -> gen_tcp:close(Sock); - {error, _} -> dist_port_use_check_fail(Port, NodeHost) - end + disk_port_use_check_ipv4(NodeHost, Port) + end. + +disk_port_use_check_ipv4(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, einval} -> disk_port_use_check_ipv6(NodeHost, Port); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +disk_port_use_check_ipv6(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) end. -ifdef(use_specs). |
