Quetion about flags of socket.recv(bufsize, [flags])
steve at holdenweb.com
Sun Feb 8 11:09:15 EST 2009
> I want to receive 4 bytes from a connected socket, I code like this:
> data = sock.recv(4)
> There is a problem with above code. The recv method will not block until
> it get all 4 bytes. So I use the second param of recv method like this
> data = sock.recv(4, socket.MSG_WAITALL)
> This works fine on linux with python 2.5, while on windows, the
> interpreter tells me 'AttributeError: 'module' object has no attribute
> 'MSG_WAITALL''. How can I work this out, or there is another way to get
> certain bytes from a socket and block if it hasn't got enough bytes?
If you *need* 4 bytes then the best way to receive them is simply to
loop until you get them (assuming you are using blocking sockets):
BLOCKSIZE = 4
buffer = ""
while len(buffer) < BLOCKSIZE:
data = sock.recv(BLOCKSIZE-len(buffer))
if not data:
break # other end is closed!
buffer += data
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
More information about the Python-list