<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:΢ÈíÑźÚ
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<br>Hi Tim,<br><br>Thanks for your reply.<br><br>I tried "erl -sname rabbit", it's OK.<br><br>my /etc/hosts looks like following:<br>127.0.0.1&nbsp;&nbsp;&nbsp; game-01 ZSWY76 localhost.localdomain localhost<br>::1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; localhost6.localdomain6 localhost6<br><br>EPMD can be started successfully, but always reports "Non-local peer connected" then force disconnecting rabbit-server.<br><br>Did I forget any necessory configration for RabbitMQ to use loopback interface to connect epmd£¿<br><br>Thanks a lot.<br><br>He Bin<br><br><br><div><div id="SkyDrivePlaceholder"></div>&gt; Date: Fri, 6 Jul 2012 18:34:07 +0100<br>&gt; From: tim@rabbitmq.com<br>&gt; To: rabbitmq-discuss@lists.rabbitmq.com<br>&gt; CC: hebin7611@hotmail.com<br>&gt; Subject: Re: [rabbitmq-discuss] Plz give me help about EPMD: Non-local peer connected<br>&gt; <br>&gt; Hi there,<br>&gt; <br>&gt; On 06/07/2012 06:53, ºÎ±ó wrote:<br>&gt; &gt; Hi all,<br>&gt; &gt;<br>&gt; &gt; I installed 
 RabbotMQ &amp; tried to start it.<br>&gt; &gt;<br>&gt; &gt; But I always got error as following:<br>&gt; &gt;<br>&gt; <br>&gt; Ok so first of all, let's see if we can get you to start a stand alone <br>&gt; distributed Erlang node successfully. Normally stack traces like that <br>&gt; occur when the host environment isn't set up quite right (from Erlang's <br>&gt; perspective).<br>&gt; <br>&gt; We need to be able to run `erl -sname rabbit` on the command line and <br>&gt; see the Erlang emulator start successfully. It should look something <br>&gt; like this:<br>&gt; <br>&gt; ##############<br>&gt; <br>&gt; t4@malachi:systest $ erl -sname rabbit<br>&gt; Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:2:2] [async-threads:0] <br>&gt; [hipe] [kernel-poll:false]<br>&gt; <br>&gt; Eshell V5.9.1  (abort with ^G)<br>&gt; (rabbit@malachi)1&gt;<br>&gt; <br>&gt; ##############<br>&gt; <br>&gt; Can you start Erlang like that successfully? I'm assuming not, but <br>&gt; please let us k
 now.<br>&gt; <br>&gt; I'm also interested in understanding what your hosts configuration <br>&gt; (e.g., /etc/hosts) looks like. On some Operating Systems (such as CentOS <br>&gt; for example), failing to set an explicit host name prevents you from <br>&gt; starting a distributed Erlang node.<br>&gt; <br>&gt; &gt; {error_logger,{{2012,7,6},{13,32,21}},"Protocol: ~p: register error:<br>&gt; &gt; ~p~n",["inet_tcp",{{badmatch,{error,epmd_close}},[{inet_tcp_dist,listen,1,[{file,"inet_tcp_dist.erl"},{line,70}]},{net_kernel,start_protos,4,[{file,"net_kernel.erl"},{line,1314}]},{net_kernel,start_protos,3,[{file,"net_kernel.erl"},{line,1307}]},{net_kernel,init_node,2,[{file,"net_kernel.erl"},{line,1197}]},{net_kernel,init,1,[{file,"net_kernel.erl"},{line,357}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}]}<br>&gt; &gt; {error_logger,{{2012,7,6},{13,32,21}},crash_report,[[{initial_call,{net_kernel,init,
 ['Argument__1']}},{pid,&lt;0.20.0&gt;},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,320}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}},{ancest<br>&gt; &gt; ors,[net_sup,kernel_sup,&lt;0.9.0&gt;]},{messages,[]},{links,[#Port&lt;0.90&gt;,&lt;0.17.0&gt;]},{dictionary,[{longnames,false}]},{trap_exit,true},{status,running},{heap_size,987},{stack_size,24},{reductions,551}],[]]}<br>&gt; &gt; {error_logger,{{2012,7,6},{13,32,21}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[rabbitmqprelaunch1077,shortnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}<br>&gt; &gt; {error_logger,{{2012,7,6},{13,32,21}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},
 {mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}<br>&gt; &gt; {error_logger,{{2012,7,6},{13,32,21}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}<br>&gt; &gt; {"Kern el pid<br>&gt; &gt; terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}<br>&gt; &gt;<br>&gt; &gt; Crash dump was written to: erl_crash.dump<br>&gt; &gt; Kernel pid terminated (application_controller)<br>&gt; &gt; ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; I ran it on a server with public IP 183.*.*.* .<br>&gt; &gt;<br>&gt; &gt; In Erlang src, I found that epmd checks connection src.<br>&gt; &gt;<br>&gt; &gt;        /* Determine if connection is from localhost */<br>&gt; &gt;        if (getpeername(s-&gt;fd,(struct sockaddr*) &amp;si,&amp;st) ||<br>&gt; &gt;            s
 t &lt; sizeof(si)) {<br>&gt; &gt;            /* Failure to get peername is regarded as non local host */<br>&gt; &gt;            s-&gt;local_peer = EPMD_FALSE;<br>&gt; &gt;        } else {<br>&gt; &gt;            /* Only 127.x.x.x and connections from the host's IP address<br>&gt; &gt;               allowed, no false positives */<br>&gt; &gt;            s-&gt;local_peer =<br>&gt; &gt; (((((unsigned) ntohl(si.sin_addr.s_addr)) &amp; 0xFF000000U) ==<br>&gt; &gt;                 0x7F000000U) ||<br>&gt; &gt; (getsockname(s-&gt;fd,(struct sockaddr*) &amp;di,&amp;st) ?<br>&gt; &gt;                 EPMD_FALSE : si.sin_addr.s_addr == di.s in_addr.s_addr));<br>&gt; &gt;        }<br>&gt; &gt;        dbg_tty_printf(g,2,(s-&gt;local_peer) ? "Local peer connected" :<br>&gt; &gt;                       "Non-local peer connected");<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; But unfortunately, si.sin_addr.s_addr was 183.*.*.*, while<br>&gt; &gt; di.sin_addr.s_addr was 127.0.0.1<br>&gt; &gt;<br>&
 gt; &gt; My log£ºChecking peer address, getsockname ret: 0, si_addr=0xb7??????,<br>&gt; &gt; di_addr=0x7f000001<br>&gt; &gt;<br>&gt; &gt;<br>&gt; <br>&gt; I could be wrong, but I suspect this is a red herring. You can restart <br>&gt; epmd with -d to get debugging information as well, but I suspect this <br>&gt; isn't relevant.<br>&gt; <br>&gt; Is there any way to force RabbitMQ server connect epmd via a specified<br>&gt; &gt; address£¿<br>&gt; &gt;<br>&gt; <br>&gt; I'm not really sure what you mean by this, but I'm fairly confident that <br>&gt; it is not necessary to even attempt to do something like that. Erlang <br>&gt; should be able to start up nodes with `-sname &lt;name&gt;` or `-name <br>&gt; &lt;name&gt;@&lt;host&gt;` and if either doesn't work, a little tweaking of the host <br>&gt; configuration should solve it.<br>&gt; <br>&gt; Based on your original comment (starting rabbitmq but always getting an <br>&gt; error) my understanding is that you're trying to start 
 rabbit on this <br>&gt; machine and it fails. AFAIK when a distributed Erlang node connects to <br>&gt; EPMD on the localhost it should be treated as such. The rabbitmq-server <br>&gt; script starts rabbit up with `-sname rabbit` which implies that the node <br>&gt; name will be rabbit@&lt;hostname&gt; so you should make sure that `erl -sname <br>&gt; rabbit` works first of all.<br></div>                                               </div></body>
</html>