aboutsummaryrefslogtreecommitdiffstats
path: root/src/gun_ws.erl
diff options
context:
space:
mode:
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.