diff --git a/lib/mongo/util/tcp_socket.rb b/lib/mongo/util/tcp_socket.rb
index <HASH>..<HASH> 100644
--- a/lib/mongo/util/tcp_socket.rb
+++ b/lib/mongo/util/tcp_socket.rb
@@ -69,13 +69,11 @@ module Mongo
       end
       if ready
         begin
-          @socket.read(maxlen, buffer)
-        rescue EOFError, Errno::ETIMEDOUT
-          raise ConnectionError
-        rescue Errno::ENOTCONN, Errno::EBADF, Errno::ECONNRESET, Errno::EPIPE
+          @socket.sysread(maxlen, buffer)
+        rescue Errno::ENOTCONN, Errno::EBADF, Errno::ECONNRESET, Errno::EPIPE, Errno::ETIMEDOUT, EOFError
           raise ConnectionFailure
-        rescue Errno::EINTR, Errno::EIO, IOError 
-          raise OperationFailure 
+        rescue Errno::EINTR, Errno::EIO, IOError
+          raise OperationFailure
         end
       else
         raise OperationTimeout
RUBY-<I>

Using sysread so Ruby <I>.x won't complain about nonblocking IO#read