fix quic server

This commit is contained in:
anlicheng 2026-02-13 12:55:58 +08:00
parent 8a095a9b45
commit 2a8ead5f01
3 changed files with 34 additions and 6 deletions

View File

@ -0,0 +1,26 @@
%%%-------------------------------------------------------------------
%%% @author anlicheng
%%% @copyright (C) 2026, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 13. 2 2026 12:46
%%%-------------------------------------------------------------------
-module(quic_client).
-author("anlicheng").
%% API
-export([start/0]).
-export([do_start/0]).
start() ->
erlang:spawn(?MODULE, do_start, []).
do_start() ->
Port = 1365,
{ok, Conn} = quicer:connect("localhost", Port, [{alpn, ["punchnet/1.0"]}, {verify, none}], 5000),
{ok, Stm} = quicer:start_stream(Conn, []),
{ok, 4} = quicer:send(Stm, <<"ping">>),
logger:debug("[quic_client] client send success"),
receive {quic, <<"pong">>, Stm, _Props} -> ok end,
ok = quicer:close_connection(Conn).

View File

@ -55,11 +55,11 @@ callback_mode() ->
%% process message, this function is called. %% process message, this function is called.
handle_event(internal, do_init, initializing, State = #state{conn = Conn}) -> handle_event(internal, do_init, initializing, State = #state{conn = Conn}) ->
logger:debug("[sdlan_quic_channel] conn: ~p, do_init", [Conn]),
case quicer:accept_stream(Conn, []) of case quicer:accept_stream(Conn, []) of
{ok, Stream} -> {ok, Stream} ->
logger:debug("[sdlan_quic_channel] get stream: ~p", [Stream]),
{next_state, initialized, State#state{stream_handle = Stream}}; {next_state, initialized, State#state{stream_handle = Stream}};
{error, closed} ->
{stop, connection_closed, State};
{error, Reason} -> {error, Reason} ->
logger:error("accept stream failed: ~p", [Reason]), logger:error("accept stream failed: ~p", [Reason]),
{stop, Reason, State} {stop, Reason, State}
@ -67,7 +67,7 @@ handle_event(internal, do_init, initializing, State = #state{conn = Conn}) ->
%% quicer相关的信息 %% quicer相关的信息
handle_event(info, {quic, Msg, Stream, _Props}, _StateName, State = #state{stream_handle = Stream}) -> handle_event(info, {quic, Msg, Stream, _Props}, _StateName, State = #state{stream_handle = Stream}) ->
logger:debug("[sdlan_quic_stream] get message: ~p", [Msg]), logger:debug("[sdlan_quic_channel] get message: ~p", [Msg]),
{keep_state, State}; {keep_state, State};
handle_event(info, {quic_closed, Stream, _Props}, _StateName, State = #state{conn = Conn, stream_handle = Stream}) -> handle_event(info, {quic_closed, Stream, _Props}, _StateName, State = #state{conn = Conn, stream_handle = Stream}) ->

View File

@ -35,10 +35,12 @@ init() ->
loop_accept(L) -> loop_accept(L) ->
case quicer:accept(L, [], infinity) of case quicer:accept(L, [], infinity) of
{ok, Conn} -> {ok, Conn} ->
logger:debug("[sdlan_quic_server] accept a new connection: ~p", [Conn]),
case quicer:handshake(Conn) of case quicer:handshake(Conn) of
ok -> {ok, NConn} ->
{ok, ChannelPid} = sdlan_quic_channel:start_link(Conn), logger:debug("[sdlan_quic_server] conn: ~p, handshake success", [NConn]),
quicer:controlling_process(Conn, ChannelPid), {ok, ChannelPid} = sdlan_quic_channel:start_link(NConn),
quicer:controlling_process(NConn, ChannelPid),
loop_accept(L); loop_accept(L);
{error, _} -> {error, _} ->
quicer:close_connection(Conn), quicer:close_connection(Conn),