Explorar o código

Merge pull request #5638 from HJianBo/gw-fix-udp-outgoing

fix(gw): not packing udp packages
lafirest %!s(int64=4) %!d(string=hai) anos
pai
achega
d7b198b292
Modificáronse 1 ficheiros con 17 adicións e 2 borrados
  1. 17 2
      apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl

+ 17 - 2
apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl

@@ -224,6 +224,9 @@ esockd_send(Data, #state{socket = {udp, _SockPid, Sock},
 esockd_send(Data, #state{socket = {esockd_transport, Sock}}) ->
     esockd_transport:async_send(Sock, Data).
 
+is_datadram_socket({esockd_transport, _}) -> false;
+is_datadram_socket({udp, _, _}) -> true.
+
 %%--------------------------------------------------------------------
 %% callbacks
 %%--------------------------------------------------------------------
@@ -676,8 +679,20 @@ with_channel(Fun, Args, State = #state{
 %%--------------------------------------------------------------------
 %% Handle outgoing packets
 
-handle_outgoing(Packets, State) when is_list(Packets) ->
-    send(lists:map(serialize_and_inc_stats_fun(State), Packets), State);
+handle_outgoing(_Packets = [], _State) ->
+    ok;
+handle_outgoing(Packets,
+                State = #state{socket = Socket}) when is_list(Packets) ->
+    case is_datadram_socket(Socket) of
+        false ->
+            send(
+              lists:map(serialize_and_inc_stats_fun(State), Packets),
+              State);
+        _ ->
+            lists:foreach(fun(Packet) ->
+                handle_outgoing(Packet, State)
+            end, Packets)
+    end;
 
 handle_outgoing(Packet, State) ->
     send((serialize_and_inc_stats_fun(State))(Packet), State).