为localhost开发节点使用`net_adm`模块函数

时间:2013-07-23 00:04:57

标签: erlang

我正在使用net_adm模块,并且似乎无法使用localhost节点获得任何乐趣。我的机器命名为:

> hostname
walden

我启动了一些本地短名称节点:

> erl -sname one -setcookie monster      
Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.1  (abort with ^G)
(one@walden)1> 

> erl -sname two -setcookie monster
Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.1  (abort with ^G)
(two@walden)1> 

到目前为止,这么好。

(two@walden)1> net_adm:names().     
{ok,[{"two",63489},{"one",63491}]}
(two@walden)2> net_adm:localhost().
"walden"
(two@walden)3> net_adm:names().     
{ok,[{"two",63489},{"one",63491}]}

两个本地节点都已注册但未连接,这是预期的。

(two@walden)4> nodes().
[]

返回节点one

(one@walden)1> net_adm:names(two). 
{error,nxdomain}
(one@walden)2> net_adm:names('two@walden'). 
{error,nxdomain}
(one@walden)3> net_adm:dns_hostname(two).
{error,two}
(one@walden)4> net_adm:dns_hostname(two@walden).
{error,two@walden}

Erlang正确地将我的localhost标识为walden,但dns_hostname/1返回错误。返回two

(two@walden)5> net_adm:ping(one@walden).
pong
(two@walden)6> nodes().                 
[one@walden]

(one@walden)5> nodes().
[two@walden]

好吧,真可惜。使用.hosts.erlang文件进行localhost开发节点非常方便 - 通过net_adm:worlds/0 - 但似乎我有点卡住了。我错过了什么或做了一些明显的错误吗?我的整个系统可能配置错误了吗?

1 个答案:

答案 0 :(得分:1)

您需要将主机名传递给namesdns_hostname,而不是节点名称。看起来您的节点已经连接到我,因为当您运行nodes()时,另一个节点会显示。