anchor.diff:  % {{{
   -spec recv_http_resp(Sock::pid(), Buf::binary()) ->
   	{ok,
  -		{Version::string(), Status::integer(), Reason::string()},
  -		[{Field::string(), Value::string()}],
  -		Body::string()
  +		{
  +			{Version::string(), Status::integer(), Reason::string()},
  +			[{Field::string(), Value::string()}],
  +			Body::string()
  +		}
   	} | {error, Reason::term()}.
   
   recv_http_resp(Sock, Buf) ->
  
positive.code: % @doc Receive and parse response headers and body
  % @end
  % {{{
  recv_http_header(Sock, {ok, {Ver, Code, Reason}, Headers, Body} = Res, Buf) ->
  	case erlang:decode_packet(httph, Buf, []) of
  		{error, DReason} -> {error, DReason};
  		{more, _} ->
  
negative.code: 			% process common response headers
  			Field = atom_to_list(FieldAtom),
  			NHeaders = [{Field, Value} | Headers],
  			recv_http_header(Sock, {ok, {{Ver, Code, Reason}, NHeaders, Body}}, Rest);
  		{ok, {http_header, _, Field, _, Value}, Rest} when is_list(Field) ->
  			% process customized response headers
  			NHeaders = [{Field, Value} | Headers],
  			recv_http_header(Sock, {ok, {{Ver, Code, Reason}, NHeaders, Body}}, Rest);
  		{ok, http_eoh, Rest} ->
  			% HTTP header part end, the rest is body data
  			{ok, {{Ver, Code, Reason}, lists:reverse(Headers), binary_to_list(recv_http_body(Sock, [Rest]))}}
  	end.
  % }}}
  
  