diff options
author | Eric Wong <e@80x24.org> | 2015-10-22 22:26:23 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-10-22 22:26:23 +0000 |
commit | 304d878e81ca90762346f1842adc0387160c5ad9 (patch) | |
tree | a7353d561ab772c3568e3f57dfa0c2cd6f79b300 | |
parent | 89cf206bb5b30dc1f5ef17946c6a96ce957a302d (diff) | |
download | mogilefs-client-304d878e81ca90762346f1842adc0387160c5ad9.tar.gz |
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.
-rw-r--r-- | lib/mogilefs/socket/pure_ruby.rb | 6 |
1 files 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 |