diff options
| author | Evan Broder <evan@stripe.com> | 2015-08-22 19:20:40 -0400 |
|---|---|---|
| committer | Tobias Brunner <tobias@strongswan.org> | 2015-08-24 11:24:05 +0200 |
| commit | 78ed3300997bca2a65406f74e6b044dc1698ed55 (patch) | |
| tree | 659f9a6760803fc691da8f2a5d46b62023e325b3 /src/libcharon/plugins/vici/ruby | |
| parent | ba3298fa8da4c5576d73ee2029a18ecf993d3d12 (diff) | |
| download | strongswan-78ed3300997bca2a65406f74e6b044dc1698ed55.tar.bz2 strongswan-78ed3300997bca2a65406f74e6b044dc1698ed55.tar.xz | |
vici: Handle closed sockets in the Ruby gem
From recvfrom(2) (which UDPSocket#recv backs into):
The return value will be 0 when the peer has performed an orderly
shutdown.
(i.e. it will return an empty string)
Previously in this scenario, Vici::Transport#recv_all would spin
forever trying to pull more data off the socket. I'm not entirely
clear what happened that caused strongSwan to shutdown the socket, but
it probably should not cause vici Ruby apps to spin.
Closes strongswan/strongswan#13.
Diffstat (limited to 'src/libcharon/plugins/vici/ruby')
| -rw-r--r-- | src/libcharon/plugins/vici/ruby/lib/vici.rb | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libcharon/plugins/vici/ruby/lib/vici.rb b/src/libcharon/plugins/vici/ruby/lib/vici.rb index f87e46e69..f8169add0 100644 --- a/src/libcharon/plugins/vici/ruby/lib/vici.rb +++ b/src/libcharon/plugins/vici/ruby/lib/vici.rb @@ -247,7 +247,11 @@ module Vici def recv_all(len) encoding = "" while encoding.length < len do - encoding << @socket.recv(len - encoding.length) + data = @socket.recv(len - encoding.length) + if data.empty? + raise TransportError, "connection closed" + end + encoding << data end encoding end |
