From 1700a4a9090789d485c190c2a6ccd2c48986f5dd Mon Sep 17 00:00:00 2001 From: Zeyla Hellyer Date: Tue, 6 Jun 2017 20:25:45 -0700 Subject: Ws read/write timeout after 90s Make read/writes to the stream timeout after 90 seconds to prevent a potentially infinitely blocked call. If the timeout is reached, perform a reconnect. This fixes issues such as intermittent internet issues causing a message to never be received, and thus infinitely blocking. --- src/gateway/shard.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gateway/shard.rs b/src/gateway/shard.rs index aaebf14..72652b9 100644 --- a/src/gateway/shard.rs +++ b/src/gateway/shard.rs @@ -813,5 +813,29 @@ fn connect(base_url: &str) -> Result<(Sender, Receiver s, + WebSocketStream::Ssl(ref mut s) => s.get_mut(), + }; + + stream.set_read_timeout(Some(timeout))?; + } + + { + let mut ws_stream = sender.get_mut(); + let stream = match *ws_stream { + WebSocketStream::Tcp(ref mut s) => s, + WebSocketStream::Ssl(ref mut s) => s.get_mut(), + }; + + stream.set_read_timeout(Some(timeout))?; + } + + Ok((sender, receiver)) } -- cgit v1.2.3