[erlang-questions] gen_tcp:accept use within a gen_fsm process

Ulf Wiger (TN/EAB) <>
Mon Jun 25 16:43:05 CEST 2007


You can pass along e.g. the parent pid to the 
init/1 function, then use 

 proc_lib:init_ack(Parent, {ok, self()}

then perform your blocking call, and then:

gen_fsm:enter_loop(Module, Options, StateName, StateData, FsmName)

See the documentation on gen_fsm.

The enter_loop() function was introduced specifically
for this kind of thing.

BR,
Ulf W
 

> -----Original Message-----
> From:  
> [mailto:] On Behalf Of igwan
> Sent: den 25 juni 2007 13:42
> To: 
> Subject: [erlang-questions] gen_tcp:accept use within a 
> gen_fsm process
> 
> Hello list,
> 
> I'm writing a small TCP test application. I want each TCP 
> connection to be handled by one gen_fsm process. I could have 
> one 'acceptor' process calling gen_tcp:accept, then spawning 
> a gen_fsm for each accepted incoming connection. But in the 
> doc, I read that, since a recent version of Erlang/OTP, I can 
> have any number of processes waiting in a gen_tcp:accept 
> call, so I wouldn't need the acceptor process anymore. My 
> question is about best practice. Where would you call 
> gen_tcp:accept in the gen_fsm module ? Into the init/1 
> function ? Like this :
> 
> -module(tcptest_fsm).
> -behaviour(gen_fsm).
> 
> init([Listen_socket] = Args) ->
>     {ok, Socket} = gen_tcp:accept(Listen_socket),
>     ...
>     {ok, conn_accepted_state, SD}.
> 
> 
> I'm not very confident about puting such a blocking call at 
> the init phase as the process wouldn't be initialized until a 
> connection arrives and thus not supervised (Am I right ?).
> Or maybe the new possibility offered by gen_tcp:accept wasn't 
> intended for use within a OTP system ?
> 
> Thanks for your help.
> 
> igwan
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
> 



More information about the erlang-questions mailing list