查看源代码 erl_epmd (kernel v10.2)

Erlang 与 epmd 的接口

此模块与 EPMD 守护进程通信,请参阅 epmd。要实现您自己的 epmd 模块,请参阅 ERTS 用户指南:如何为 Erlang 分布实现备用节点发现

摘要

函数

由分布模块调用,将 Host 解析为远程节点的 IP 地址。

由分布模块调用,以获取本地节点在接受新的分布请求时应监听的端口。

net_adm:names/0 调用。 Host 默认为 localhost。返回在指定主机上 epmd 注册的 Erlang 节点的名称和关联的端口号。如果 epmd 未运行,则返回 {error, address}

请求 EPMD 实例中给定节点的分布端口。与端口一起,它返回一个分布协议版本,自 Erlang/OTP R6 以来一直是 5。

epmd 注册节点,并告知 epmd 当前节点将使用哪个端口。它返回一个创建编号。每次注册时,此数字都会递增,以帮助区分连接到 epmd 的同名新节点实例。

当此模块作为 erl_distribution supervisor 的子节点添加时,会调用此函数。

函数

链接到此函数

address_please(Name, Host, AddressFamily)

查看源代码 (自 OTP 21.0 起)
-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

链接到此函数

listen_port_please(Name, Host)

查看源代码 (自 OTP 23.0 起)
-spec listen_port_please(Name, Host) -> {ok, Port}
                            when
                                Name :: atom() | string(),
                                Host :: atom() | string() | inet:ip_address(),
                                Port :: non_neg_integer().

由分布模块调用,以获取本地节点在接受新的分布请求时应监听的端口。

链接到此函数

names(Host)

查看源代码 (自 OTP 21.0 起)
-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 默认为 localhost。返回在指定主机上 epmd 注册的 Erlang 节点的名称和关联的端口号。如果 epmd 未运行,则返回 {error, address}

示例

(arne@dunn)1> erl_epmd:names(localhost).
{ok,[{"arne",40262}]}
链接到此函数

port_please(Name, Host)

查看源代码 (自 OTP 21.0 起)
-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().

等同于 port_please(Name, Host, infinity)

链接到此函数

port_please(Name, Host, Timeout)

查看源代码 (自 OTP 21.0 起)
-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。

链接到此函数

register_node(Name, Port)

查看源代码 (自 OTP 21.0 起)
-spec register_node(Name, Port) -> Result
                       when
                           Name :: string(),
                           Port :: non_neg_integer(),
                           Creation :: non_neg_integer(),
                           Result :: {ok, Creation} | {error, already_registered} | term().

等同于 register_node(Name, Port, inet)

链接到此函数

register_node(Name, Port, Driver)

查看源代码 (自 OTP 21.0 起)
-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 注册后,如果连接断开,它将自动尝试重新连接到守护进程。

链接到此函数

start_link()

查看源代码 (自 OTP 21.0 起)
-spec start_link() -> {ok, pid()} | ignore | {error, term()}.

当此模块作为 erl_distribution supervisor 的子节点添加时,会调用此函数。