diff --git a/src/hackney_response.erl b/src/hackney_response.erl index d4f7aa32..a1277ed2 100644 --- a/src/hackney_response.erl +++ b/src/hackney_response.erl @@ -147,6 +147,8 @@ stream_body(Client=#client{parser=Parser, clen=CLen, te=TE}) -> stream_body(Data, #client{parser=Parser}=Client) -> stream_body1(hackney_http:execute(Parser, Data), Client). +stream_body1({more, Parser}, Client) -> + stream_body_recv(<<>>, Client#client{parser=Parser}); stream_body1({more, Parser, Buffer}, Client) -> stream_body_recv(Buffer, Client#client{parser=Parser}); stream_body1({ok, Data, Parser}, Client) -> @@ -349,4 +351,16 @@ close(#client{socket=nil}=Client) -> Client#client{state = closed}; close(#client{transport=Transport, socket=Skt}=Client) -> Transport:close(Skt), + flush(Transport, Skt), Client#client{state = closed, socket=nil}. + + +flush(Transport, Socket) -> + {Msg, MsgClosed, MsgError} = Transport:messages(Socket), + receive + {Msg, Socket, _} -> flush(Transport, Socket) ; + {MsgClosed, Socket} -> flush(Transport, Socket) ; + {MsgError, Socket, _} -> flush(Transport, Socket) + after 0 -> + ok + end. diff --git a/src/hackney_stream.erl b/src/hackney_stream.erl index 7df666dc..cf72e9fd 100644 --- a/src/hackney_stream.erl +++ b/src/hackney_stream.erl @@ -120,11 +120,7 @@ maybe_continue(Parent, Owner, Ref, #client{transport=Transport, exit({owner_down, Owner, Reason}); {system, From, Request} -> sys:handle_system_msg(Request, From, Parent, ?MODULE, [], - {stream_loop, Parent, Owner, Ref, Client}); - Else -> - ?report_trace("stream: unexpected message", [{message, Else}]), - error_logger:error_msg("Unexpected message: ~w~n", [Else]) - + {stream_loop, Parent, Owner, Ref, Client}) after 0 -> stream_loop(Parent, Owner, Ref, Client) end; @@ -146,10 +142,7 @@ maybe_continue(Parent, Owner, Ref, #client{transport=Transport, {system, From, Request} -> sys:handle_system_msg(Request, From, Parent, ?MODULE, [], {maybe_continue, Parent, Owner, Ref, - Client}); - Else -> - ?report_trace("stream: unexpected message", [{message, Else}]), - error_logger:error_msg("Unexpected message: ~w~n", [Else]) + Client}) after 5000 -> Transport:setopts(Socket, [{active, false}]), proc_lib:hibernate(?MODULE, maybe_continue, [Parent, Owner, Ref,