Erlang:如何从gen_server中的init()获取结果

Atl*_*las 4 erlang gen-server

我的init()函数创建UDP Socket并将Socket值作为State返回.

start() ->
        {ok, ServerPid} = gen_server:start_link(?MODULE, [], []).

%%% gen_server API

init([]) ->
        {ok, Socket} = gen_udp:open(8888, [list, {active,false}]),
        {ok, Socket}.
Run Code Online (Sandbox Code Playgroud)

如何在函数start()中获取Socket?

joh*_*hlo 6

您需要通过创建一个gen_server:call新创建的gen_server进程来获取套接字.例如:

start() ->
        {ok, ServerPid} = gen_server:start_link(?MODULE, [], []),
        Socket = gen_server:call(ServerPid, fetch_socket),
        ... Use Socket ...
Run Code Online (Sandbox Code Playgroud)

并在gen_server中添加如下内容:

handle_call(fetch_socket, _From, State) ->
   {reply, State, State}. %% State == Socket
Run Code Online (Sandbox Code Playgroud)