Use {active,once} instead of async_recv

This commit is contained in:
Loïc Hoguin 2018-12-18 13:09:41 +01:00
parent b80e68b20d
commit a4ef42af9a
1 changed files with 7 additions and 4 deletions

View File

@ -111,16 +111,19 @@ handle_cast(Msg, State) ->
{stop, {stomp_unexpected_cast, Msg}, State}.
handle_info({inet_async, _Sock, _Ref, {ok, Data}}, State) ->
handle_info({Tag, Sock, Data}, State=#reader_state{socket=Sock})
when Tag =:= tcp; Tag =:= ssl ->
case process_received_bytes(Data, State#reader_state{recv_outstanding = false}) of
{ok, NewState} ->
{noreply, ensure_stats_timer(run_socket(control_throttle(NewState))), hibernate};
{stop, Reason, NewState} ->
{stop, Reason, NewState}
end;
handle_info({inet_async, _Sock, _Ref, {error, closed}}, State) ->
handle_info({Tag, Sock}, State=#reader_state{socket=Sock})
when Tag =:= tcp_closed; Tag =:= ssl_closed ->
{stop, normal, State};
handle_info({inet_async, _Sock, _Ref, {error, Reason}}, State) ->
handle_info({Tag, Sock, Reason}, State=#reader_state{socket=Sock})
when Tag =:= tcp_error; Tag =:= ssl_error ->
{stop, {inet_error, Reason}, State};
handle_info({inet_reply, _Sock, {error, closed}}, State) ->
{stop, normal, State};
@ -264,7 +267,7 @@ run_socket(State = #reader_state{state = blocked}) ->
run_socket(State = #reader_state{recv_outstanding = true}) ->
State;
run_socket(State = #reader_state{socket = Sock}) ->
_ = rabbit_net:async_recv(Sock, 0, infinity),
rabbit_net:setopts(Sock, [{active, once}]),
State#reader_state{recv_outstanding = true}.