What does Python’s socket.recv() return for non-blocking sockets if no data is received until a timeout occurs?

Basically, I’ve read in several places that socket.recv() will return whatever it can read, or an empty string signalling that the other side has shut down (the official docs don’t even mention what it returns when the connection is shut down… great!). This is all fine and dandy for blocking sockets, since we know that recv() only returns when there actually is something to receive, so when it returns an empty string, it MUST mean the other side has closed the connection, right?

Python socket receive – incoming packets always have a different size

I’m using the SocketServer module for a TCP server.
I’m experiencing some issue here with the recv() function, because the incoming packets always have a different size, so if I specify recv(1024) (I tried with a bigger value, and smaller), it gets stuck after 2 or 3 requests because the packet length will be smaller (I think), and then the server gets stuck until a timeout.