From 1cc3b32b8ef6c187b8be3601319e21c1ba04fa27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20S=C3=B6derqvist?= Date: Mon, 24 Oct 2022 14:09:59 +0200 Subject: Handle send errors --- src/gun_ws.erl | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'src/gun_ws.erl') 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. -- cgit v1.2.3