Receive data from socket stream

Hrvoje Niksic hniksic at
Mon Apr 28 11:42:45 CEST 2008

Nick Craig-Wood <nick at> writes:

> What you are missing is that if the recv ever returns no bytes at all
> then the other end has closed the connection.  So something like this
> is the correct thing to write :-
>   data = ""
>   while True:
>       new = client.recv(256)
>       if not new:
>           break
>       data += new

This is a good case for the iter() function:

buf = cStringIO.StringIO()
for new in iter(partial(client.recv, 256), ''):
data = buf.getvalue()

Note that appending to a string is almost never a good idea, since it
can result in quadratic allocation.

More information about the Python-list mailing list