[EMAIL PROTECTED] wrote: > To your question of why you'd ever [recv(0)]. > > This is very common in any network programming. If you send a packet > of data that has a header and payload, and the header contains the > length (N) of the payload, then at some point you have to receive N > bytes. If N is zero, then you receive 0 bytes. Of course, you CAN > test for N == 0, that's obvious - but why would you if the underlying > layers worked correctly? Its just extra code to handle an special case.
We need "extra code" around recv to ensure we get exactly N bytes; 'recv(N)' can return less. The most straightforward code I know to read exactly N bytes never passes zero to recv (untested): def recvall(sock, size): """ Read and return exactly 'size' bytes from socket 'sock'. Kind of the other side of sock.sendall. """ parts = [] while size > 0: data = sock.recv(size) if not data: raise SomeException("Socket closed early.") size -= len(data) parts.append(data) return ''.join(parts) -- --Bryan -- http://mail.python.org/mailman/listinfo/python-list