-behavior(gen_mod)
ejabberd 내부에 새 모듈 ( )을 추가했고 서버에 대한 SSL 연결을 열고 ssl connection ( ssl:send()
함수)을 사용하여 직접 메시지를 보낼 수있었습니다 . 그러나 이후에는 답변을받을 수 없습니다.
receive
erlang 의 옵션을 사용하여 메시지를 잡으려고 시도했지만 여전히 운이 없습니다.gen_server
동작 을 사용하여 모듈을 상태 저장 모듈로 변경하려고 시도했지만 여전히 handle_info
메시지가 있는 호출을 관찰하지 않습니다 .ssl:recv/2
어느 쪽도 사용하여 어떤 응답도 얻을 수 없었다 .내가 뭔가를 놓치고 있습니까? erlang의 SSL 소켓에서 비동기식으로 응답을 받으려면 어떻게해야합니까?
어떤 포인터라도 정말 감사하겠습니다. 감사합니다!
코드 : 코드의 관련 부분 만 추가합니다.
sendPacketToServer() ->
case ssl:connect(Gateway, Port, Options, ?SSL_TIMEOUT) of
{ok, Socket} ->
ssl:controlling_process(Socket, self()),
Packet = .....,
Result = ssl:send(Socket, Packet),
receiveMessage(),
ssl:close(Socket),
?INFO_MSG("~n~n~n~n Successfully sent payload to the server, result: ~p for the user: ~p", [Result, Username]);
{error, Reason} = Err ->
?ERROR_MSG("Unable to connect to the server: ~s for the user: ~p", [ssl:format_error(Reason), Username]),
Err
end
...
....
receiveMessage() ->
receive ->
{ssl, Msg, Data} -> % incoming msg from SSL, send it to process
......
{ssl_closed, Msg} -> % incoming msg from SSL, send it to process
.....
{ssl_error, Msg} -> % incoming msg from SSL, send it to process
.....
{ssl_passive, Msg} -> % incoming msg from SSL, send it to process
....
end.
gen_server에 대한 다음 코드를 추가했습니다 : (다음을 수행 할 때 소켓을 즉시 닫지 않지만 여전히 작동하지 않습니다).
start(Host, Opts) ->
gen_mod:start_child(?MODULE, Host, Opts).
stop(Host) ->
gen_mod:stop_child(?MODULE, Host).
init([ServerHost|_]) ->
Opts = gen_mod:get_module_opts(ServerHost, ?MODULE),
start(ServerHost, Opts),
{ok, #state{host = ServerHost}}.
handle_call(Request, From, State) ->
?WARNING_MSG("Unexpected call from ~p: ~p", [From, Request]),
{noreply, State}.
handle_cast(Msg, State) ->
?WARNING_MSG("Unexpected cast: ~p", [Msg]),
{noreply, State}.
handle_info(Info, State) ->
?WARNING_MSG("Unexpected info: ~p", [Info]),
{noreply, State}.
terminate(_Reason, State) ->
ok.
code_change(_OldVsn, State, _Extra) -> {ok, State}.
모든 메시지에 대한 명시 적 콜백이 있기 때문에 gen_server 모듈을 사용하여 문제를 극복 할 수있었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다