aboutsummaryrefslogtreecommitdiffstats
path: root/src/gun_ws.erl
diff options
context:
space:
mode:
authorViktor Söderqvist <[email protected]>2022-10-24 14:09:59 +0200
committerLoïc Hoguin <[email protected]>2022-10-24 14:44:15 +0200
commit1cc3b32b8ef6c187b8be3601319e21c1ba04fa27 (patch)
tree790f27c916f38858d9cca3e18a9f76a6f5ed163c /src/gun_ws.erl
parenta4425a1d7db2d9e35f246aa078c324988ea395f0 (diff)
downloadgun-1cc3b32b8ef6c187b8be3601319e21c1ba04fa27.tar.gz
gun-1cc3b32b8ef6c187b8be3601319e21c1ba04fa27.tar.bz2
gun-1cc3b32b8ef6c187b8be3601319e21c1ba04fa27.zip
Handle send errors
Diffstat (limited to 'src/gun_ws.erl')
-rw-r--r--src/gun_ws.erl33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/gun_ws.erl b/src/gun_ws.erl
index e02179a..e864351 100644
--- a/src/gun_ws.erl
+++ b/src/gun_ws.erl
@@ -312,20 +312,25 @@ send(Frame, State=#ws_state{stream_ref=StreamRef,
frame => Frame
},
EvHandlerState1 = EvHandler:ws_send_frame_start(WsSendFrameEvent, EvHandlerState0),
- Transport:send(Socket, cow_ws:masked_frame(Frame, Extensions)),
- EvHandlerState = EvHandler:ws_send_frame_end(WsSendFrameEvent, EvHandlerState1),
- if
- Frame =:= close; element(1, Frame) =:= close ->
- {[
- {state, State#ws_state{out=close}},
- %% We can close immediately if we already received a close frame.
- case In of
- close -> close;
- _ -> closing(State)
- end
- ], EvHandlerState};
- true ->
- {[], EvHandlerState}
+ case Transport:send(Socket, cow_ws:masked_frame(Frame, Extensions)) of
+ ok ->
+ EvHandlerState = EvHandler:ws_send_frame_end(WsSendFrameEvent, EvHandlerState1),
+ if
+ Frame =:= close; element(1, Frame) =:= close ->
+ {[
+ {state, State#ws_state{out=close}},
+ %% We can close immediately if we already
+ %% received a close frame.
+ case In of
+ close -> close;
+ _ -> closing(State)
+ end
+ ], EvHandlerState};
+ true ->
+ {[], EvHandlerState}
+ end;
+ Error={error, _} ->
+ {Error, EvHandlerState0}
end.
%% Send many frames.