From 304d878e81ca90762346f1842adc0387160c5ad9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 22 Oct 2015 22:26:23 +0000 Subject: socket/pure_ruby: fix Ruby 1.8 compatibility For non-kgio users, IO#wait_readable did not appear until Ruby 2.0. Additionally, optimistically perform reads before waiting because EOF handling behavior differs in current revisions of Ruby 2.3.0dev. --- lib/mogilefs/socket/pure_ruby.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mogilefs/socket/pure_ruby.rb b/lib/mogilefs/socket/pure_ruby.rb index 7530a40..e74bbef 100644 --- a/lib/mogilefs/socket/pure_ruby.rb +++ b/lib/mogilefs/socket/pure_ruby.rb @@ -23,15 +23,15 @@ class MogileFS::Socket < Socket sock end - def wait_writable(timeout) + def wait_writable(timeout = nil) IO.select(nil, [ self ], nil, timeout) end unless self.instance_methods.include?(:wait_writable) # Ruby <2.0.0 def timed_read(len, dst = "", timeout = 5) begin - wait_readable(timeout) or unreadable_socket!(timeout) return read_nonblock(len, dst) rescue Errno::EAGAIN + wait(timeout) or unreadable_socket!(timeout) rescue EOFError return end while true @@ -39,10 +39,10 @@ class MogileFS::Socket < Socket def timed_peek(len, dst, timeout = 5) begin - wait_readable(timeout) or unreadable_socket!(timeout) rc = recv_nonblock(len, Socket::MSG_PEEK) return rc.empty? ? nil : dst.replace(rc) rescue Errno::EAGAIN + wait(timeout) or unreadable_socket!(timeout) rescue EOFError dst.replace("") return -- cgit v1.2.3-24-ge0c7