anchor.diff:              outgoing_connection_manager:report_successful_handshake(ConnManager),
               {ok, State};
           {ok, #server_message{message_body = #handshake_response{status = Error}}} ->
  -            ?error("Handshake refused by provider ~ts due to ~p, closing connection.", [
  -                provider_logic:to_printable(ProviderId), Error
  -            ]),
  +            ?THROTTLE_ERROR(
  +                SessId,
  +                "Handshake refused by provider ~ts due to ~p, closing connection.",
  +                [provider_logic:to_printable(ProviderId), Error]
  +            ),
               {error, handshake_failed};
           _ ->
  -            ?error("Received invalid handshake response from provider ~ts, closing connection.", [
  -                provider_logic:to_printable(ProviderId)
  -            ]),
  +            ?THROTTLE_ERROR(
  +                SessId,
  +                "Received invalid handshake response from provider ~ts, closing connection.",
  +                [provider_logic:to_printable(ProviderId)]
  +            ),
               {error, handshake_failed}
       catch _:Error ->
  -        ?error("Client handshake message decoding error: ~p", [Error]),
  +        ?THROTTLE_ERROR(SessId, "Handshake response from Provider ~ts decoding error: ~p", [
  +            provider_logic:to_printable(ProviderId), Error
  +        ]),
           {error, handshake_failed}
       end.
   
  
positive.code:     try
          {ok, Msg} = clproto_serializer:deserialize_client_message(Data, undefined),
  
          {PeerId, SessionId} = connection_auth:handle_handshake(
              Msg#client_message.message_body, IpAddress
          ),
  
          NewState = State#state{
              peer_id = PeerId,
              session_id = SessionId,
              rib = router:build_rib(SessionId)
          },
          send_server_message(NewState, #server_message{
              message_body = #handshake_response{status = 'OK'}
  
negative.code:     Timeout :: non_neg_integer(), ConnManager :: pid()
  ) ->
      no_return().
  connect_with_provider(ProviderId, SessId, Domain,
      Host, Port, Transport, Timeout, ConnManager
  ) ->
      DomainAndIpInfo = case Domain of
          Host -> str_utils:format("@ ~s:~b", [Host, Port]);
          _ -> str_utils:format("@ ~s:~b (~s)", [Host, Port, Domain])
      end,
      ?debug("Connecting to provider ~ts ~s", [
          provider_logic:to_printable(ProviderId), DomainAndIpInfo
      ]),
  
      try
          State = open_socket_to_provider(
              SessId, ProviderId, Domain, Host, Port,
              Transport, Timeout, ConnManager
          ),
          activate_socket(State, true),
  