File 3144-kernel-Add-erl_epmd_port-to-configure-a-static-dist-.patch of Package erlang
From a958be4e9351d6eb8d5371c44ebdca48336276b0 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Wed, 18 Dec 2019 10:57:38 +0100
Subject: [PATCH 04/11] kernel: Add -erl_epmd_port to configure a static dist
port
The port is used both as a default for what port to listen to
and which port to connect to if the remote node is not registered
in epmd.
---
erts/doc/src/erl_cmd.xml | 6 ++++++
lib/kernel/src/erl_epmd.erl | 38 +++++++++++++++++++++++++++-----------
2 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/lib/kernel/src/erl_epmd.erl b/lib/kernel/src/erl_epmd.erl
index 93ed25c59c..a7d2cb3c17 100644
--- a/lib/kernel/src/erl_epmd.erl
+++ b/lib/kernel/src/erl_epmd.erl
@@ -58,7 +58,7 @@
-include("inet_int.hrl").
-include("erl_epmd.hrl").
-
+-include_lib("kernel/include/inet.hrl").
%%%----------------------------------------------------------------------
%%% API
@@ -102,9 +102,7 @@ port_please(Node, HostName, Timeout) when is_list(HostName) ->
port_please(Node, EpmdAddr, Timeout) ->
get_port(Node, EpmdAddr, Timeout).
-
-
-port_please1(Node,HostName, Timeout) ->
+port_please1(Node, HostName, Timeout) ->
Family = case inet_db:res_option(inet6) of
true ->
inet6;
@@ -112,11 +110,21 @@ port_please1(Node,HostName, Timeout) ->
inet
end,
case inet:gethostbyname(HostName, Family, Timeout) of
- {ok,{hostent, _Name, _ , _Af, _Size, [EpmdAddr | _]}} ->
- get_port(Node, EpmdAddr, Timeout);
- _Else ->
- ?port_please_failure2(_Else),
- noport
+ {ok,#hostent{ h_addr_list = [EpmdAddr | _]}} ->
+ case get_port(Node, EpmdAddr, Timeout) of
+ noport ->
+ case listen_port_please(Node, HostName) of
+ {ok, 0} ->
+ noport;
+ {ok, Prt} ->
+ {port, Prt, 5}
+ end;
+ Reply ->
+ Reply
+ end;
+ _Else ->
+ ?port_please_failure2(_Else),
+ noport
end.
-spec listen_port_please(Name, Host) -> {ok, Port} when
@@ -124,7 +132,15 @@ port_please1(Node,HostName, Timeout) ->
Host :: string() | inet:ip_address(),
Port :: non_neg_integer().
listen_port_please(_Name, _Host) ->
- {ok, 0}.
+ try
+ %% Should come up with a new name for this as ERL_EPMD_PORT describes what
+ %% port epmd runs on which could easily be confused with this.
+ {ok, [[StringPort]]} = init:get_argument(erl_epmd_port),
+ Port = list_to_integer(StringPort),
+ {ok, Port}
+ catch error:_ ->
+ {ok, 0}
+ end.
-spec names() -> {ok, [{Name, Port}]} | {error, Reason} when
Name :: string(),
@@ -143,7 +159,7 @@ names() ->
names(HostName) when is_atom(HostName); is_list(HostName) ->
case inet:gethostbyname(HostName) of
- {ok,{hostent, _Name, _ , _Af, _Size, [EpmdAddr | _]}} ->
+ {ok,#hostent{ h_addr_list = [EpmdAddr | _]}} ->
get_names(EpmdAddr);
Else ->
Else
--
2.16.4