[erlang-questions] How: jinterface nodes cannot connect to epmd in Mac OS X

Artur Matos arturmatos78@REDACTED
Sun Jan 6 14:10:07 CET 2008


Hi to all,

I am currently creating a program made of several Erlang nodes and  
jinterface nodes, all running
on the same machine. I am having some serious issues making them  
connect to each other,
and I was hoping some one could help me. I am using short names, and  
running Erlang 11b-5-1 on Mac OS X 10.4.11 (client version).

In a nutshell, my Erlang and jinterface nodes are able to communicate  
only when I am not connected to the internet.
If I connect to the internet and start the nodes again, they are not  
able to talk anymore. The Erlang nodes still run and
can connect to epmd, but cannot send or receive messages from each  
other. As for the jinterface nodes, they all
crash with a java.IO.Exception, complaining that the nameserver is  
not responding (e.g, "Nameserver not responding on Mortimer when  
publishing time").

After some googling, I've found out that Mac OS X changes the host  
name and domain dynamically according to
current "connection" in the machine ("connection" in Mac OS being  
just a bunch of settings that defines how to connect
to the internet - for instance, the DHCP server, username, password  
and so on). So if I am not connected to the internet,
my host name will be Mortimer.local, and all works; but if I connect,  
my domain name becomes whatever my ISP's DHCP server sends to
my machine (for instance Mortimer@REDACTED), and that seems to  
interfere with Erlang name resolution.

I was able to force Mac OS not to change my host name anymore, by  
editing an entry in /etc/hostconfig. This fixed my Erlang nodes,
and now they can talk even if I am connected to the internet.  
Unfortunately, this didn't fix the jinterface nodes, and they
still crash with the same exception whenever I am connected. Does  
anyone has any idea of how I could fix this?

As a reference, this is the Java code I am using to connect:

  OtpNode node = new OtpNode("time");
  OtpMbox mbox = node.createMbox("server");

OtpEpmd.publishPort(node);


Thanks,

Artur






More information about the erlang-questions mailing list