anchor.diff:  keepalive_loop(Socket, NumRequests, Buffer, Options, Callback) ->
       case ?MODULE:handle_request(Socket, Buffer, Options, Callback) of
           {keep_alive, NewBuffer} ->
  -            ?MODULE:keepalive_loop(Socket, NumRequests,
  +            ?MODULE:keepalive_loop(Socket, NumRequests + 1,
                                      NewBuffer, Options, Callback);
           {close, _} ->
               elli_tcp:close(Socket),
  
positive.code:       Callback  :: elli_handler:callback(),
        ConnToken :: {'keep_alive' | 'close', binary()}.
  handle_request(S, PrevB, Opts, {Mod, Args} = Callback) ->
      t(request_start),
      {Method, RawPath, V, B0} = get_request(S, PrevB, Opts, Callback),
      t(headers_start),
      {RequestHeaders, B1} = get_headers(S, V, B0, Opts, Callback),
  
negative.code: %%
  
  %% @doc Retrieve the request line.
  get_request(Socket, <<>>, Options, Callback) ->
      NewBuffer = recv_request(Socket, <<>>, Options, Callback),
      get_request(Socket, NewBuffer, Options, Callback);
  get_request(Socket, Buffer, Options, Callback) ->
      t(request_start),
      get_request_(Socket, Buffer, Options, Callback).
  
  get_request_(Socket, Buffer, Options, {Mod, Args} = Callback) ->
      case erlang:decode_packet(http_bin, Buffer, []) of
          {more, _} ->
              recv_request(Socket, Buffer, Options, Callback);
          {ok, {http_request, Method, RawPath, Version}, Rest} ->
              {Method, RawPath, Version, Rest};
          {ok, {http_error, _}, _} ->
  