anchor.diff:      send(State);
   ready_to_send({timeout, _Ref, ?IDLE_TIMEOUT_MSG},
                 State = #state{sock = Sock}) ->
  +    ?INFO("drain_id=~p channel_id=~p dest=~s at=idle_timeout "
  +          "state=ready_to_send",
  +          log_info(State, [])),
       gen_tcp:close(Sock),
       {next_state, disconnected, State#state{sock = undefined,
                                              idle_tref = undefined}, hibernate};
  
positive.code:          "err=gen_tcp data=~p sock=~p duration=~s state=sending",
            log_info(S, [sending, Reason, Sock, duration(S)])),
      reconnect(tcp_bad(S));
  sending({timeout, Ref, ?IDLE_TIMEOUT_MSG}, State=#state{idle_tref=TRef}) ->
      {next_state, disconnecting, State#state{idle_tref=NewRef}};
  sending(timeout, S = #state{}) ->
      %% Sleep when inactive, trigger fullsweep GC & Compact
      {next_state, sending, S, hibernate};
  
negative.code: -define(SHRINK_TRIES, 10).
  -define(SHRINK_BUF_SIZE, 10).
  -define(IDLE_TIMEOUT_MSG, idle_timeout).
  
  -include("logplex.hrl").
  -include("logplex_logging.hrl").
  