diff options
-rw-r--r-- | lib/mogilefs/socket_common.rb | 4 | ||||
-rw-r--r-- | test/socket_test.rb | 14 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/mogilefs/socket_common.rb b/lib/mogilefs/socket_common.rb index a716d35..5ba8c10 100644 --- a/lib/mogilefs/socket_common.rb +++ b/lib/mogilefs/socket_common.rb @@ -44,9 +44,9 @@ module MogileFS::SocketCommon def read(size, buf = "", timeout = 5) timed_read(size, buf, timeout) or return # nil/EOF - while (size -= buf.bytesize) > 0 + while (remaining = size - buf.bytesize) > 0 tmp ||= "" - timed_read(size, tmp, timeout) or return buf # truncated + timed_read(remaining, tmp, timeout) or return buf # truncated buf << tmp end diff --git a/test/socket_test.rb b/test/socket_test.rb index c4dcf02..e217da5 100644 --- a/test/socket_test.rb +++ b/test/socket_test.rb @@ -95,4 +95,18 @@ module SocketTest accepted.close assert_nil sock.timed_gets end + + def test_read_in_full + sock = MogileFS::Socket.tcp(@host, @port) + accepted = @srv.accept + thr = Thread.new do + accepted.write "HELLO" + sleep 0.1 + accepted.write " " + sleep 0.1 + accepted.write "WORLD!!!" + end + buf = sock.read("HELLO WORLD!!!".bytesize) + assert_equal "HELLO WORLD!!!", buf + end end |