erl_epmd (kernel v8.0.2)

This module communicates with the EPMD daemon, see epmd. To implement your own epmd module please see ERTS User's Guide: How to Implement an Alternative Node Discovery for Erlang Distribution

Link to this section Summary

Functions

Called by the distribution module to resolves the Host to an IP address of a remote node.

Called by the distribution module to get which port the local node should listen to when accepting new distribution requests.

Called by net_adm:names/0. Host defaults to the localhost. Returns the names and associated port numbers of the Erlang nodes that epmd registered at the specified host. Returns {error, address} if epmd is not operational.

Requests the distribution port for the given node of an EPMD instance. Together with the port it returns a distribution protocol version which has been 5 since Erlang/OTP R6.

Registers the node with epmd and tells epmd what port will be used for the current node. It returns a creation number. This number is incremented on each register to help differentiate a new node instance connecting to epmd with the same name.

This function is invoked as this module is added as a child of the erl_distribution supervisor.

Link to this section Functions

Link to this function

address_please/3

(since OTP 21.0)

Specs

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}.

Called by the distribution module to resolves the Host to an IP address of a remote node.

As an optimization this function may also return the port and version of the remote node. If port and version are returned port_please/3 will not be called.

Link to this function

listen_port_please/2

(since OTP 23.0)

Specs

listen_port_please(Name, Host) -> {ok, Port}
                      when
                          Name :: atom() | string(),
                          Host :: atom() | string() | inet:ip_address(),
                          Port :: non_neg_integer().

Called by the distribution module to get which port the local node should listen to when accepting new distribution requests.

Link to this function

names/1

(since OTP 21.0)

Specs

names(Host) -> {ok, [{Name, Port}]} | {error, Reason}
         when
             Host :: atom() | string() | inet:ip_address(),
             Name :: string(),
             Port :: non_neg_integer(),
             Reason :: address | file:posix().

Called by net_adm:names/0. Host defaults to the localhost. Returns the names and associated port numbers of the Erlang nodes that epmd registered at the specified host. Returns {error, address} if epmd is not operational.

Example:

(arne@dunn)1> erl_epmd:names(localhost).
{ok,[{"arne",40262}]}
Link to this function

port_please/2

(since OTP 21.0)

Specs

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().

Requests the distribution port for the given node of an EPMD instance. Together with the port it returns a distribution protocol version which has been 5 since Erlang/OTP R6.

Link to this function

port_please/3

(since OTP 21.0)

Specs

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().
Link to this function

register_node/2

(since OTP 21.0)

Specs

register_node(Name, Port) -> Result
                 when
                     Name :: string(),
                     Port :: non_neg_integer(),
                     Creation :: non_neg_integer(),
                     Result :: {ok, Creation} | {error, already_registered} | term().

Registers the node with epmd and tells epmd what port will be used for the current node. It returns a creation number. This number is incremented on each register to help differentiate a new node instance connecting to epmd with the same name.

After the node has successfully registered with epmd it will automatically attempt reconnect to the daemon if the connection is broken.

Link to this function

register_node/3

(since OTP 21.0)

Specs

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().
Link to this function

start_link/0

(since OTP 21.0)

Specs

start_link() -> {ok, pid()} | ignore | {error, term()}.

This function is invoked as this module is added as a child of the erl_distribution supervisor.