[erlang-questions] FW: Local and remote sends

Gunilla Arendt gunilla@REDACTED
Tue Oct 31 14:46:51 CET 2006


If I'm understanding this right, you send a message to a CNode
using
  {any, Node} ! {GatewayPid}

and wants to use the same format to send a message to an Erlang pid?

Then register your pid as 'any'.

(b@REDACTED)2> Pid = m:s().
<0.44.0>
(b@REDACTED)3> register(any, P).
true

And, from another (or the same) node:

(a@REDACTED)1> {any, b@REDACTED} ! hello.
hello

/ Gunilla


Bob Cowdery wrote:
> On 2006-10-31 13:18, Bob Cowdery wrote:
>> On 2006-10-30 16:54, Bob Cowdery wrote:
>>> Hi
>>>
>>> I have a process that usually sends to a CNode, however, for
>>> testing I use erlang processes running in the same session. My
>>> sends are of the form: {any, From} ! {GatewayPid} When I am testing
>>> this does not work and gives an argument error on running and I
>>> have to change it to:
>>>> From ! {GatewayPid}
>>> Is there some form that will work in both situations?
>>>> is it correct that 'any' is the registered name of a process? and
>>>> that From is the node name (also atom) you want to reach? then
>>>> sending to From during testing is an error and should not work.
>>>> you should have a pid (or registered name), not a node name.
>>>>
>>>> i think i must have misunderstood something here.
>> As far as I can tell I have two different situations. When working
>> locally in one erlang session the From is a Pid (the Pid of the
>> sender to which I am replying) which I need to use directly as the
>> target of the send. When the From is a CNode there is no Pid, just a
> 
>>> it is somewhat confusing to have the same variable name in these cases. 
>>> presumably it is perfectly fine when seen in context, but there is no 
>>> context here. please consider adding context, or having different names.
> It's just a receive loop 
> <snip>
> server_loop(Registrations, Classes) ->
>     receive
> 		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> 		%% Register a new actor
> 		%%
> 		%% @From 		the erlang short-name or Pid
> 		%% @Class		the class of this client
> 		%% @Mode		one of [client, server, both]
> 		%% @Access 		one of [default, polling, none]
> 		%% @Format 		one of [TBD]
> 		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>     	{new_reg, From, Class, Mode, Access, Format} ->
> 	...
> </snip>
> so could get called from any type of node or process. I guess there could be a different pattern depending on the type of 'From' but all the code is common except for that one instance of replying with From or {any, From}.
> 
>> short name in my case (e.g. c1@REDACTED) and I need to use a tuple to
>> address it like {any, c1@REDACTED}. The 'any' is a registered name but is
>> ignored for all intent and purpose, so it's just any old atom as far
>> as I am concerned. It explains this a bit in the interoperability
>> tutorial on page 20.
> 
>>> when i go to the interoperability tutorial 
>>> http://www.erlang.org/doc/doc-5.5.1/doc/tutorial/part_frame.html
>>> i have no page numbers. could you give me the chapter/paragraph instead?
> 7.1
> 
>> I guess I need to test the address and see what form it is. Do you
>> know of any simple way to determin a Pid from a short address apart
>> from looking at the makeup and deducing what it is.
> 
>>> erlang:is_pid/1 is a good way to see if you have a pid.
> Thanks, that works fine.
> 
> bengt




More information about the erlang-questions mailing list