0
start/0
を呼び出すとこのプログラムは正常に実行されますが、run/0
には呼び出されません。 run/0
を呼び出してプログラムを起動すると、{error, closed}
がgen/tcp
になります。親プロセスで常にlisten()を呼び出す必要がありますか?
-module(echo_server).
-compile(export_all).
run() ->
spawn(fun() -> start() end).
start() ->
{ok, Listen} = gen_tcp:listen(12345, [binary,{packet,0},
{reuseaddr,true},
{active, true}]),
spawn(fun() -> par_connect(Listen) end).
par_connect(Listen) ->
{ok,Socket} = gen_tcp:accept(Listen),
spawn(fun() -> par_connect(Listen) end),
loop(Socket).
loop(Socket) ->
receive
{tcp,Socket,Bin} =Msg ->
io:format("received ~p~n",[Msg]),
gen_tcp:send(Socket,Bin),
loop(Socket);
Any ->
io:format("any other received ~p~n",[Any]),
gen_tcp:close(Socket)
end.
ありがとうございました。後で申し訳ありません。いい答えだ! –