From 3c19fc91b44b0fa2f0179f99797dec8ffa58d28e Mon Sep 17 00:00:00 2001 From: Austin Hellyer Date: Sun, 15 Jan 2017 11:42:25 -0800 Subject: Don't reconnect on WS error within some time Wait until at least one heartbeat has been sent before doing so. --- src/client/gateway/shard.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/client/gateway/shard.rs b/src/client/gateway/shard.rs index ecf5c89..0b2b35f 100644 --- a/src/client/gateway/shard.rs +++ b/src/client/gateway/shard.rs @@ -12,6 +12,7 @@ use super::{GatewayError, GatewayStatus, prep}; use time; use websocket::client::{Client as WsClient, Sender, Receiver}; use websocket::message::Message as WsMessage; +use websocket::result::WebSocketError; use websocket::stream::WebSocketStream; use websocket::ws::sender::Sender as WsSender; use ::constants::OpCode; @@ -410,6 +411,12 @@ impl Shard { self.reconnect(receiver).map(|(ev, rec)| Some((ev, Some(rec)))) }, Err(Error::WebSocket(why)) => { + if let WebSocketError::NoDataAvailable = why { + if self.heartbeat_instants.1.is_none() { + return Ok(None); + } + } + warn!("Websocket error: {:?}", why); info!("Will attempt to reconnect or resume"); -- cgit v1.2.3