diff options
-rw-r--r-- | src/gun.erl | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/gun.erl b/src/gun.erl index d751b59..e4a919d 100644 --- a/src/gun.erl +++ b/src/gun.erl @@ -49,6 +49,9 @@ -export([await_body/3]). -export([await_body/4]). +%% Flushing gun messages. +-export([flush/1]). + %% Cancelling a stream. -export([cancel/2]). @@ -287,6 +290,44 @@ await_body(ServerPid, StreamRef, Timeout, MRef, Acc) -> {error, timeout} end. +-spec flush(pid() | reference()) -> ok. +flush(ServerPid) when is_pid(ServerPid) -> + flush_pid(ServerPid); +flush(StreamRef) -> + flush_ref(StreamRef). + +flush_pid(ServerPid) -> + receive + {gun_response, ServerPid, _, _, _, _} -> + flush_pid(ServerPid); + {gun_data, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_push, ServerPid, _, _, _, _, _, _} -> + flush_pid(ServerPid); + {gun_error, ServerPid, _, _} -> + flush_pid(ServerPid); + {gun_error, ServerPid, _} -> + flush_pid(ServerPid); + {'DOWN', _, process, ServerPid, _} -> + flush_pid(ServerPid) + after 0 -> + ok + end. + +flush_ref(StreamRef) -> + receive + {gun_response, _, StreamRef, _, _, _} -> + flush_ref(StreamRef); + {gun_data, _, StreamRef, _, _} -> + flush_ref(StreamRef); + {gun_push, _, StreamRef, _, _, _, _, _} -> + flush_ref(StreamRef); + {gun_error, _, StreamRef, _} -> + flush_ref(StreamRef) + after 0 -> + ok + end. + %% Cancelling a stream. -spec cancel(pid(), reference()) -> ok. |