diff options
author | Lukas Larsson <lukas@erlang.org> | 2020-08-10 16:48:38 +0200 |
---|---|---|
committer | Lukas Larsson <lukas@erlang.org> | 2020-08-10 16:48:38 +0200 |
commit | af86d259d7979f1fbe24d5a33cf05cb676acff88 (patch) | |
tree | 8a1fb55dd50aa3cb859c418ed9205e382e0d7475 /lib/erl_interface | |
parent | 6d42dfd5795f18c30640c47586cf9f382be2c9ad (diff) | |
parent | 3870d3679d076ae56c4207b4556e87d4acf53394 (diff) | |
download | erlang-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.c | 6 | ||||
-rw-r--r-- | lib/erl_interface/test/erl_call_SUITE.erl | 20 |
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"; |