檢視原始碼 erl_epmd (kernel v10.2)
Erlang 與 epmd 的介面
此模組與 EPMD 常駐程式溝通,請參考 epmd。若要實作您自己的 epmd 模組,請參考 ERTS 使用者指南:如何為 Erlang 分散式系統實作替代節點發現機制
摘要
函式
由分散式模組呼叫,以將遠端節點的 Host
解析為 IP 位址。
由分散式模組呼叫,以取得本機節點在接受新的分散式請求時應監聽的埠號。
由 net_adm:names/0
呼叫。Host
預設為本機主機。傳回在指定主機上由 epmd
註冊的 Erlang 節點的名稱和相關聯的埠號。如果 epmd
無法運作,則傳回 {error, address}
。
請求 EPMD 實例中給定節點的分散式埠號。連同埠號,它會傳回自 Erlang/OTP R6 以來的分散式協定版本,該版本為 5。
向 epmd
註冊節點,並告知 epmd 目前節點將使用的埠號。它會傳回一個建立編號。每次註冊時,此編號都會遞增,以協助區分以相同名稱連線至 epmd 的新節點實例。
當此模組新增為 erl_distribution
Supervisor 的子項目時,會呼叫此函式。
函式
-spec address_please(Name, Host, AddressFamily) -> Success | {error, term()} when Name :: string(), Host :: string() | inet:ip_address(), AddressFamily :: inet | inet6, Port :: non_neg_integer(), Version :: non_neg_integer(), Success :: {ok, inet:ip_address()} | {ok, inet:ip_address(), Port, Version}.
由分散式模組呼叫,以將遠端節點的 Host
解析為 IP 位址。
作為最佳化,此函式也可能會傳回遠端節點的埠號和版本。如果傳回埠號和版本,則不會呼叫 port_please/3
。
-spec listen_port_please(Name, Host) -> {ok, Port} when Name :: atom() | string(), Host :: atom() | string() | inet:ip_address(), Port :: non_neg_integer().
由分散式模組呼叫,以取得本機節點在接受新的分散式請求時應監聽的埠號。
-spec names(Host) -> {ok, [{Name, Port}]} | {error, Reason} when Host :: atom() | string() | inet:ip_address(), Name :: string(), Port :: non_neg_integer(), Reason :: address | file:posix().
由 net_adm:names/0
呼叫。Host
預設為本機主機。傳回在指定主機上由 epmd
註冊的 Erlang 節點的名稱和相關聯的埠號。如果 epmd
無法運作,則傳回 {error, address}
。
範例
(arne@dunn)1> erl_epmd:names(localhost).
{ok,[{"arne",40262}]}
-spec port_please(Name, Host) -> {port, Port, Version} | noport | closed | {error, term()} when Name :: atom() | string(), Host :: atom() | string() | inet:ip_address(), Port :: non_neg_integer(), Version :: non_neg_integer().
-spec port_please(Name, Host, Timeout) -> {port, Port, Version} | noport | closed | {error, term()} when Name :: atom() | string(), Host :: atom() | string() | inet:ip_address(), Timeout :: non_neg_integer() | infinity, Port :: non_neg_integer(), Version :: non_neg_integer().
請求 EPMD 實例中給定節點的分散式埠號。連同埠號,它會傳回自 Erlang/OTP R6 以來的分散式協定版本,該版本為 5。
-spec register_node(Name, Port) -> Result when Name :: string(), Port :: non_neg_integer(), Creation :: non_neg_integer(), Result :: {ok, Creation} | {error, already_registered} | term().
-spec register_node(Name, Port, Driver) -> Result when Name :: string(), Port :: non_neg_integer(), Driver :: inet_tcp | inet6_tcp | inet | inet6, Creation :: non_neg_integer() | -1, Result :: {ok, Creation} | {error, already_registered} | term().
向 epmd
註冊節點,並告知 epmd 目前節點將使用的埠號。它會傳回一個建立編號。每次註冊時,此編號都會遞增,以協助區分以相同名稱連線至 epmd 的新節點實例。
在節點成功向 epmd 註冊後,如果連線中斷,它會自動嘗試重新連線至常駐程式。
當此模組新增為 erl_distribution
Supervisor 的子項目時,會呼叫此函式。