diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index 225973d52..222e2bb3f 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -131,11 +131,11 @@ init([Transport, RawSocket, Options]) -> EnableStats = emqx_zone:get_env(Zone, enable_stats, true), IdleTimout = emqx_zone:get_env(Zone, idle_timeout, 30000), SendFun = send_fun(Transport, Socket), + SockType = Transport:type(Socket), ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => SendFun, - socktype => Transport:type(Socket)}, Options), + sendfun => SendFun}, [Options ++ [{socktype, SockType}]]), ParserState = emqx_protocol:parser(ProtoState), GcPolicy = emqx_zone:get_env(Zone, force_gc_policy, false), GcState = emqx_gc:init(GcPolicy), diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index 85eaabc26..d19cc637a 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -83,8 +83,9 @@ %%------------------------------------------------------------------------------ -spec(init(map(), list()) -> state()). -init(#{peername := Peername, peercert := Peercert, sendfun := SendFun, socktype := SockType}, Options) -> +init(#{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) -> Zone = proplists:get_value(zone, Options), + SockType = proplists:get_value(socktype, Options, tcp), #pstate{zone = Zone, sendfun = SendFun, peername = Peername, @@ -109,7 +110,7 @@ init(#{peername := Peername, peercert := Peercert, sendfun := SendFun, socktype connected = false, ignore_loop = emqx_config:get_env(mqtt_ignore_loop_deliver, false), topic_alias_maximum = #{to_client => 0, from_client => 0}, - socktype = SockType}. + socktype = SockType}. init_username(Peercert, Options) -> case proplists:get_value(peer_cert_as_username, Options) of diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index 2b50559cc..10da543e0 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -126,8 +126,7 @@ websocket_init(#state{request = Req, options = Options}) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => send_fun(self()), - socktype => websocket}, Options), + sendfun => send_fun(self())}, [Options ++ [{socktype, websocket}]]), ParserState = emqx_protocol:parser(ProtoState), Zone = proplists:get_value(zone, Options), EnableStats = emqx_zone:get_env(Zone, enable_stats, true),