anchor.diff:      recv(S);
   
   throttle(#transport{throttle_cb = F, throttled = B} = S) ->
  -    throttle(cb(F, B), S).
  +    Res = cb(F, B),
  +
  +    try throttle(Res, S) of
  +        #transport{} = NS ->
  +            throttle(defrag(NS))
  +    catch
  +        #transport{throttled = false} = NS ->
  +            recv(NS);
  +        #transport{} = NS ->
  +            NS
  +    end.
   
   %% cb/2
   
  
positive.code: throttle(NPid, #transport{parent = Pid, throttled = Msg} = S)
    when is_pid(NPid), is_binary(Msg) ->
      diameter_peer:recv(Pid, {Msg, NPid}),
      throttle(S#transport{throttled = true});
  
  throttle({NPid, F}, #transport{throttled = Msg} = S)
    when is_pid(NPid), is_binary(Msg) ->
  
negative.code: 
  %% Callback says to receive another message.
  throttle(ok, #transport{throttled = true} = S) ->
      throw(S#transport{throttled = false});
  
  %% Callback says to accept a received message.
  throttle(ok, #transport{parent = Pid, throttled = Msg} = S)
    when is_binary(Msg) ->
      diameter_peer:recv(Pid, Msg),
      S;
  
  throttle({ok = T, F}, S) ->
      throttle(T, S#transport{throttle_cb = F});
  