내 init() 함수는 UDP 소켓을 만들고 소켓 값을 State로 반환합니다.Erlang : gen_server의 init()에서 결과를 얻는 방법
start() ->
{ok, ServerPid} = gen_server:start_link(?MODULE, [], []).
%%% gen_server API
init([]) ->
{ok, Socket} = gen_udp:open(8888, [list, {active,false}]),
{ok, Socket}.
내 함수 start()에서 어떻게 소켓을 가져올 수 있습니까?
네, 그렇게 할 수 있습니다. 그러나 소켓을 여는 프로세스는 기본적으로 제어 프로세스이며 활성 모드에서 패킷을 수신하는 프로세스이며, 소켓이 종료되면 소켓이 닫힙니다. 이 경우에는 아마도 당신이 원하는 것이 아닙니다! 해결책은'gen_udp : controlling_process' 함수를 사용하여 제어를 gen_server에 전달하는 것입니다. 그러나 이것은'start' /'start_link'가 나쁜 것 인'{ok, Pid} '를 반환한다는 관례를 깨뜨릴 것입니다. 서버를 쿼리하는 것이 좋습니다. – rvirding
당신이 맞습니다. 컨텍스트에서 명확하지는 않지만 시작 프로세스를 제어 프로세스로 만들고 싶지는 않을 것입니다. 그러나 왜'gen_udp : controlling_process'를 사용하면'{ok, Pid}'가 반환되지 않을까요? – kjw0188
물론'{ok, Pid}'를 반환하지는 않습니다. 원래의 질문에서'start' 함수에서'{ok, Socket} '을 반환하고 ** this **를 사용하면 규칙을 위반하게된다는 것을 의미했습니다. – rvirding