<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 1, 2015 at 3:54 PM, Sid Muller <span dir="ltr"><<a href="mailto:sid5@gmx.us" target="_blank">sid5@gmx.us</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:Verdana;font-size:12.0px"><div>
<div>Hi,</div>

<div> </div>

<div>Can someone explain why the code from afile_server responds only once. If I send the Pid a different message it just hangs the shell.</div>

<div> </div>

<div>Here is the code below:</div>

<div>-module(afile_server).<br>
-export([start/1, loop/1]).</div>

<div>start(Dir) -> spawn(afile_server, loop, [Dir]).</div>

<div>loop(Dir) -><br>
    receive<br>
        {Client, list_dir} -><br>
            Client ! {self(), file:list_dir(Dir)},<br>
            loop(Dir);<br>
        {Client, {get_file, File}} -><br>
            Full = filename:join(Dir, File),<br>
            Client ! {self(), file:read_file(Full)},<br>
            loop(Dir)<br>
    end,<br>
    loop(Dir).</div>

<div> </div>

<div>We compile it and run it:</div>

<div>1> c(afile_server).<br>
{ok,afile_server}<br>
2> Pid = afile_server:start(".").<br>
<0.40.0></div>

<div><br>
We send it a list_dir message:<br>
<pre><code><br>
3> Pid ! {self(), list_dir}.<br>
{<0.33.0>,list_dir}</div>

<div> </div>

<div>And receive reponse just fine:<br>
4> receive X -> X end.<br>
{<0.40.0>,<br>
 {ok,["afile_server.erl", "afile_server.beam"]}}</div></div></div></div></blockquote><div><br></div><div>You've just received X...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:Verdana;font-size:12.0px"><div>

<div>Send the same message again:<br>
5> Pid ! {self(), list_dir}.<br>
{<0.33.0>,list_dir}</div>

<div> </div>

<div>And receive response, no problem:<br>
6> receive X -> X end.      <br>
{<0.40.0>,<br>
 {ok,["afile_server.erl", "afile_server.beam"]}}</div></div></div></div></blockquote><div><br></div><div><br></div><div>...and now you've received the same X...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:Verdana;font-size:12.0px"><div>

<div>Now we send a get_file message:<br></div><div>
7> Pid ! {self(), {get_file, "afile_server.erl"}}.<br>
{<0.33.0>,{get_file,"afile_server.erl"}}</div>

<div> </div>

<div>But receive hangs:<br>
8> receive X -> X end.                            </div></div></div></div></blockquote><div><br></div><div>...and now you're trying to receive X, which is already bound to the previous message, but that's not the message you're getting. If you were to use some variable name other than X, a variable that's not yet bound, it would work fine.</div><div><br></div><div>--steve</div></div></div></div>