diff --git a/riak/transports/pbc.py b/riak/transports/pbc.py
index <HASH>..<HASH> 100644
--- a/riak/transports/pbc.py
+++ b/riak/transports/pbc.py
@@ -119,7 +119,15 @@ class SocketWithId(connection.Socket):
 
     def recv(self, want_len):
         try:
-            return self.sock.recv(want_len)
+            res = self.sock.recv(want_len)
+
+            # Assume the socket is closed if no data is
+            # returned on a blocking read.
+            if len(res) == 0 and want_len > 0:
+                self.close()
+
+            return res
+
         except socket.error, e:
             # If the socket is in a bad state, close it and allow it
             # to re-connect on the next try
Handle implicit socket close on SocketWithId

If we do a blocking read with non-zero request size, and we
get a 0 byte response, assume the socket is closed since this
indicates EOF.