diff options
author | Viktor Söderqvist <[email protected]> | 2022-10-24 14:09:59 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2022-10-24 14:44:15 +0200 |
commit | 1cc3b32b8ef6c187b8be3601319e21c1ba04fa27 (patch) | |
tree | 790f27c916f38858d9cca3e18a9f76a6f5ed163c /src/gun_ws.erl | |
parent | a4425a1d7db2d9e35f246aa078c324988ea395f0 (diff) | |
download | gun-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.erl | 33 |
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. |