anchor.diff:                              ok, Message),
                   %% may fail, when tcp just closed
                   _ = inet:setopts(Socket, [{active, once}]),
  -                state_after_receiving(State, lists:nth(1, Message));
  +                save_n_msgs(Message, fun set_last_msg_received/2, State);
               {?deliver, Process, Message} ->
                   ?TRACE("Received message ~.0p", [Message]),
                   ?LOG_MESSAGE_SOCK('rcv', Data, byte_size(Data), channel(State)),
                   forward_msg(Process, Message, State),
                   %% may fail, when tcp just closed
                   _ = inet:setopts(Socket, [{active, once}]),
  -                state_after_receiving(State, Message);
  +                save_n_msgs(Message, fun set_last_msg_received/2, State);
               {user_close} ->
                   log:log(warn,"[ CC ~p (~p) ] tcp user_close request", [self(), pid_groups:my_pidname()]),
                   close_connection(Socket, State);
  
positive.code: on({web_debug_info, Requestor}, State) ->
      Now = os:timestamp(),
      TimeLastMsgSent = time_last_msg_sent(State),
      SecondsAgo =
          case TimeLastMsgSent of
              {0,0,0} -> infinity;
              _ ->  timer:now_diff(Now, TimeLastMsgSent) div 1000000
          end,
      Runtime = timer:now_diff(Now, started(State)) / 1000000,
      {SentPerS, ReceivedPerS} =
          if Runtime =< 0 -> {"n/a", "n/a"};
  
negative.code: -define(TRACE(X,Y), ok).
  -behaviour(gen_component).
  
  -define(NUM_KEEP_MSGS, 10).
  -define(KEEP_MSG_OR_TAG, tag).
  
  -compile({inline, [dest_ip/1, dest_port/1, local_listen_port/1, channel/1,
                     socket/1, set_socket/2,
                     started/1,
  