From 7d63cfea77d0eed669ed75816478bcb1fd3152f0 Mon Sep 17 00:00:00 2001 From: Johan Oskarsson Date: Tue, 5 Sep 2017 11:47:11 -0700 Subject: [PATCH 1/4] Capture the wider SystemCallError, including broken pipe --- lib/slack/real_time/concurrency/celluloid.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/slack/real_time/concurrency/celluloid.rb b/lib/slack/real_time/concurrency/celluloid.rb index d5ddb57c..866d7353 100644 --- a/lib/slack/real_time/concurrency/celluloid.rb +++ b/lib/slack/real_time/concurrency/celluloid.rb @@ -34,7 +34,7 @@ def run_loop @connected = @socket.connect driver.start loop { read } if socket - rescue EOFError => e + rescue EOFError, SystemCallError => e logger.debug("#{self.class}##{__method__}") { e } driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'server closed connection')) unless @closing ensure From 51015aa6d11affed5ae4c3fff6843dc409f48768 Mon Sep 17 00:00:00 2001 From: Johan Oskarsson Date: Tue, 5 Sep 2017 13:47:21 -0700 Subject: [PATCH 2/4] Catch more specific exception --- lib/slack/real_time/concurrency/celluloid.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/slack/real_time/concurrency/celluloid.rb b/lib/slack/real_time/concurrency/celluloid.rb index 866d7353..9a277e48 100644 --- a/lib/slack/real_time/concurrency/celluloid.rb +++ b/lib/slack/real_time/concurrency/celluloid.rb @@ -34,7 +34,7 @@ def run_loop @connected = @socket.connect driver.start loop { read } if socket - rescue EOFError, SystemCallError => e + rescue EOFError, Errno::EPIPE => e logger.debug("#{self.class}##{__method__}") { e } driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'server closed connection')) unless @closing ensure From 43215cc19f7ba627351132a21ad886949f5d688c Mon Sep 17 00:00:00 2001 From: Johan Oskarsson Date: Thu, 7 Sep 2017 10:23:40 -0700 Subject: [PATCH 3/4] Add changelog and a test --- CHANGELOG.md | 1 + .../real_time/concurrency/celluloid_spec.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 594e39fb..7d60387a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### 0.9.2 (Next) * [#161](https://github.com/slack-ruby/slack-ruby-client/pull/161): Added support for cursor pagination - [@dblock](https://github.com/dblock). +* [#162](https://github.com/slack-ruby/slack-ruby-client/pull/162): Gracefully close websocket on errno::epipe - [@johanoskarsson](https://github.com/johanoskarsson). * Your contribution here. ### 0.9.1 (8/24/2017) diff --git a/spec/slack/real_time/concurrency/celluloid_spec.rb b/spec/slack/real_time/concurrency/celluloid_spec.rb index 51d7aa56..58ffc5d0 100644 --- a/spec/slack/real_time/concurrency/celluloid_spec.rb +++ b/spec/slack/real_time/concurrency/celluloid_spec.rb @@ -43,6 +43,22 @@ def read socket.run_loop end end + + describe '#run_loop with epipe' do + let(:test_socket) do + Class.new(described_class) do + def read + fail Errno::EPIPE + end + end + end + + it 'runs' do + expect(ws).to receive(:emit) + expect(ws).to receive(:start) + socket.run_loop + end + end end pending 'send_data' From f0d8b61c60a65c24d93fa33448ecfe24cb17b85d Mon Sep 17 00:00:00 2001 From: Johan Oskarsson Date: Thu, 7 Sep 2017 13:41:22 -0700 Subject: [PATCH 4/4] Case --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d60387a..396eae17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ### 0.9.2 (Next) * [#161](https://github.com/slack-ruby/slack-ruby-client/pull/161): Added support for cursor pagination - [@dblock](https://github.com/dblock). -* [#162](https://github.com/slack-ruby/slack-ruby-client/pull/162): Gracefully close websocket on errno::epipe - [@johanoskarsson](https://github.com/johanoskarsson). +* [#162](https://github.com/slack-ruby/slack-ruby-client/pull/162): Gracefully close websocket on Errno::EPIPE - [@johanoskarsson](https://github.com/johanoskarsson). * Your contribution here. ### 0.9.1 (8/24/2017)