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/ -- http://mail.python.org/mailman/listinfo/python-list