On Apr 28, 4:42 am, Hrvoje Niksic <[EMAIL PROTECTED]> wrote:
> Nick Craig-Wood <[EMAIL PROTECTED]> 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), ''):
>     buf.write(new)
> data = buf.getvalue()
>
> Note that appending to a string is almost never a good idea, since it
> can result in quadratic allocation.

A question regarding cStringIO.StringIO(): is there a way to do get
getvalue() to return all the bytes after the current file position
(not before)? For example

buf = cStringIO.StringIO()
buf.write("foo bar")
buf.seek(3)
buf.getvalue(True) # the True argument means
                   # to return the bytes up
                   # to the current file position

That returns 'foo'. Is there a way to get it to return ' bar'?
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to