aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2015-04-09 15:21:17 +0300
committerLoïc Hoguin <[email protected]>2015-04-09 15:21:17 +0300
commitbcb218ef7758dff5e7a74be7cab282719844c8a5 (patch)
tree553da9475bb093bbb26f6f62b0230d95d11a282b
parent8366ba94bb9e450221a246acdd482c0162affcd9 (diff)
downloadgun-bcb218ef7758dff5e7a74be7cab282719844c8a5.tar.gz
gun-bcb218ef7758dff5e7a74be7cab282719844c8a5.tar.bz2
gun-bcb218ef7758dff5e7a74be7cab282719844c8a5.zip
Don't clear out the transport on connection retry
Fixes an issue introduced in the previous commit that broke automatic reconnection. Thanks to Adrian Roe/Steve Strong for the report.
-rw-r--r--src/gun.erl20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/gun.erl b/src/gun.erl
index 0fddfe3..e5bbd7e 100644
--- a/src/gun.erl
+++ b/src/gun.erl
@@ -463,7 +463,8 @@ connect(State=#state{owner=Owner, host=Host, port=Port, opts=Opts, transport=Tra
end.
retry(State=#state{opts=Opts}) ->
- retry(State, maps:get(retry, Opts, 5)).
+ retry(State#state{socket=undefined, protocol=undefined, protocol_state=undefined},
+ maps:get(retry, Opts, 5)).
%% Exit normally if the retry functionality has been disabled.
retry(_, 0) ->
@@ -512,8 +513,7 @@ loop(State=#state{parent=Parent, owner=Owner, host=Host, port=Port,
case Protocol:handle(Data, ProtoState) of
close ->
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined,
- protocol=undefined});
+ retry(State);
{upgrade, Protocol2, ProtoState2} ->
ws_loop(State#state{protocol=Protocol2, protocol_state=ProtoState2});
ProtoState2 ->
@@ -522,13 +522,11 @@ loop(State=#state{parent=Parent, owner=Owner, host=Host, port=Port,
{Closed, Socket} ->
Protocol:close(ProtoState),
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined,
- protocol=undefined});
+ retry(State);
{Error, Socket, _} ->
Protocol:close(ProtoState),
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined,
- protocol=undefined});
+ retry(State);
{OK, _PreviousSocket, _Data} ->
loop(State);
{Closed, _PreviousSocket} ->
@@ -593,16 +591,16 @@ ws_loop(State=#state{parent=Parent, owner=Owner, socket=Socket,
case Protocol:handle(Data, ProtoState) of
close ->
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined, protocol=undefined});
+ retry(State);
ProtoState2 ->
ws_loop(State#state{protocol_state=ProtoState2})
end;
{Closed, Socket} ->
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined, protocol=undefined});
+ retry(State);
{Error, Socket, _} ->
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined, protocol=undefined});
+ retry(State);
%% Ignore any previous HTTP keep-alive.
keepalive ->
ws_loop(State);
@@ -612,7 +610,7 @@ ws_loop(State=#state{parent=Parent, owner=Owner, socket=Socket,
case Protocol:send(Frame, ProtoState) of
close ->
Transport:close(Socket),
- retry(State#state{socket=undefined, transport=undefined, protocol=undefined});
+ retry(State);
ProtoState2 ->
ws_loop(State#state{protocol_state=ProtoState2})
end;