From c78eeef184945b49b6d6e117760acc2fc43be31e Mon Sep 17 00:00:00 2001 From: Kevin Clark Date: Wed, 18 Jun 2008 01:15:36 +0000 Subject: [PATCH] Teach Socket how to read_nonblock git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@668996 13f79535-47bb-0310-9956-ffa450edef68 --- lib/rb/lib/thrift/transport/socket.rb | 14 +++++++++----- lib/rb/spec/socket_spec.rb | 6 +++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/rb/lib/thrift/transport/socket.rb b/lib/rb/lib/thrift/transport/socket.rb index 37dda9bb..818d329a 100644 --- a/lib/rb/lib/thrift/transport/socket.rb +++ b/lib/rb/lib/thrift/transport/socket.rb @@ -39,13 +39,17 @@ module Thrift end end - def read(sz) + def read(sz, nonblock=false) begin - data = @handle.recv(sz) - rescue StandardError - raise TransportException.new(TransportException::NOT_OPEN) + if nonblock + data = @handle.read_nonblock(sz) + else + data = @handle.read(sz) + end + rescue StandardError => e + raise TransportException.new(TransportException::NOT_OPEN, e.message) end - if (data.length == 0) + if (data.nil? or data.length == 0) raise TransportException.new(TransportException::UNKNOWN, "Socket: Could not read #{sz} bytes from #{@host}:#{@port}") end data diff --git a/lib/rb/spec/socket_spec.rb b/lib/rb/spec/socket_spec.rb index b6e2a14d..cfd7c7bf 100644 --- a/lib/rb/spec/socket_spec.rb +++ b/lib/rb/spec/socket_spec.rb @@ -49,21 +49,21 @@ class ThriftSocketSpec < Spec::ExampleGroup it "should raise an error when it cannot read from the handle" do TCPSocket.should_receive(:new).and_return(@handle) @socket.open - @handle.should_receive(:recv).with(17).and_raise(StandardError) + @handle.should_receive(:read).with(17).and_raise(StandardError) lambda { @socket.read(17) }.should raise_error(TransportException) { |e| e.type.should == TransportException::NOT_OPEN } end it "should raise an error when it reads no data from the handle" do TCPSocket.should_receive(:new).and_return(@handle) @socket.open - @handle.should_receive(:recv).with(17).and_return("") + @handle.should_receive(:read).with(17).and_return("") lambda { @socket.read(17) }.should raise_error(TransportException, "Socket: Could not read 17 bytes from localhost:9090") end it "should return the data read when reading from the handle works" do TCPSocket.should_receive(:new).and_return(@handle) @socket.open - @handle.should_receive(:recv).with(17).and_return("test data") + @handle.should_receive(:read).with(17).and_return("test data") @socket.read(17).should == "test data" end -- 2.17.1