summaryrefslogtreecommitdiff
path: root/lib/erl_interface
diff options
context:
space:
mode:
authorLukas Larsson <lukas@erlang.org>2020-08-10 16:48:38 +0200
committerLukas Larsson <lukas@erlang.org>2020-08-10 16:48:38 +0200
commitaf86d259d7979f1fbe24d5a33cf05cb676acff88 (patch)
tree8a1fb55dd50aa3cb859c418ed9205e382e0d7475 /lib/erl_interface
parent6d42dfd5795f18c30640c47586cf9f382be2c9ad (diff)
parent3870d3679d076ae56c4207b4556e87d4acf53394 (diff)
downloaderlang-af86d259d7979f1fbe24d5a33cf05cb676acff88.tar.gz
Merge branch 'lukas/kernel/remsh/OTP-16783/OTP-16784/OTP-16785/OTP-16786' into maint
* lukas/kernel/remsh/OTP-16783/OTP-16784/OTP-16785/OTP-16786: port_please/2 and port_please/3 can return closed ei: Fix erl_call -R -address host:port kernel: Fix -erl_epmd_port to work properly kernel: Allow '-remsh nodename' without the hostname
Diffstat (limited to 'lib/erl_interface')
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c6
-rw-r--r--lib/erl_interface/test/erl_call_SUITE.erl20
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index c4f59c7174..f5471777b0 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -1252,6 +1252,12 @@ static int ei_connect_helper(ei_cnode* ec,
return ERL_ERROR;
}
+ if (!ec->thisnodename[0] && epmd_says_version < EI_DIST_6) {
+ /* This is a dynamic node name. We have to use at least vsn 6
+ of the dist protocol for this to work. */
+ epmd_says_version = EI_DIST_6;
+ }
+
err = ei_socket_ctx__(cbs, &ctx, ec->setup_context);
if (err) {
EI_TRACE_ERR2("ei_xconnect","-> SOCKET failed: %s (%d)",
diff --git a/lib/erl_interface/test/erl_call_SUITE.erl b/lib/erl_interface/test/erl_call_SUITE.erl
index 339131fed6..9cfc2ac25c 100644
--- a/lib/erl_interface/test/erl_call_SUITE.erl
+++ b/lib/erl_interface/test/erl_call_SUITE.erl
@@ -72,13 +72,23 @@ random_cnode_name(Config) when is_list(Config) ->
%% we should get the same recycled node name again
CNodeName_R2 = start_node_and_get_c_node_name(Name, ["-R"]),
- check_eq(CNodeName_R, CNodeName_R2)
+ check_eq(CNodeName_R, CNodeName_R2),
+
+ %% Check that it works with static ports using address
+ {ok,Nodes} = erl_epmd:names('localhost'),
+ Port = proplists:get_value(nodename(),Nodes),
+ MyName = get_node_name_from_self(
+ ["-R","-address","localhost:"++integer_to_list(Port)]),
+ check_eq(MyName, node())
after
halt_node(Name)
end,
ok.
+nodename() ->
+ hd(string:split(atom_to_list(node()), "@")).
+
check_eq(X,Y) ->
{Y,X} = {X,Y}.
@@ -200,6 +210,14 @@ start_node_and_get_port(Name) ->
NamePortList),
Port.
+get_node_name_from_self(Opts) ->
+ Str = apply_on_self("erlang node []", Opts),
+ {ok, [{atom, _, Node}], _} = erl_scan:string(Str),
+ Node.
+
+apply_on_self(MfaStr, Opts) ->
+ get_erl_call_result(Opts ++ ["-a",MfaStr]).
+
find_erl_call() ->
ErlCallName = case os:type() of
{win32, _} -> "erl_call.exe";