Quetion about flags of socket.recv(bufsize, [flags])
Steve Holden
steve at holdenweb.com
Sun Feb 8 11:09:15 EST 2009
Ken wrote:
> 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
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
More information about the Python-list
mailing list