[erlang-questions] questions about gen_server behaviour

Ulf Wiger (TN/EAB) ulf.wiger@REDACTED
Fri May 25 15:00:16 CEST 2007

A synchronous request is similar to
call(Server, Request) ->
   MonRef = erlang:monitor(process, Server),
   Msg = {'$gen_call', {self(), MonRef}, Request},
   Server ! Msg,
      {MonRef, Reply} -> Reply;
      {'DOWN', MonRef, _, _, _} -> erlang:error(...);
   after 5000 -> 
(The actual code is a little bit more contrived.)
A cast is simply:
cast(Server, Msg) ->
   Server ! {'$gen_cast', Msg},
So to answer your question, the gen_server sends the reply in the case
of a synchronous call.
The 'ok' in cast is not _sent_, it is simply the return value from the
cast/2 function.
With a call, you get actual acknowledgment from the server that the
request was received and processed. With cast, you have no such
information. The message may have been received and understood, but you
cannot know that.
Cast is also asynchronous, while call isn't. Call gives a form of flow
Ulf W


	From: erlang-questions-bounces@REDACTED
[mailto:erlang-questions-bounces@REDACTED] On Behalf Of Ming
	Sent: den 25 maj 2007 14:46
	To: erlang-questions@REDACTED
	Subject: [erlang-questions] questions about gen_server behaviour
	Could anyone explain these two functions below in details
(better with example)?
	1.synchronous request ----call
	Makes a synchronous call to the gen_server by sending a request
and waiting until a reply arrives or a timout occurs.
	who sends the reply? what exactly is the reply? 
	2.asynchronous request ----cast
	Sends an asynchronous request to the gen_server and returns ok
	who sends the ok? 
	these 2 functions seems to me the same ,
	so confused by them ..
	Ming   Zhao
	Dobelnsgatan 2C  231
	752 37 Uppsala, SWE
	Email: zhaoomingg@REDACTED
	Tel: +46 (0)736964077
	Skype: zhaoomingg 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20070525/f8e05fae/attachment.htm>

More information about the erlang-questions mailing list