import time,socket def recvall(the_socket,timeout=''): #setup to use non-blocking sockets #if no data arrives it assumes transaction is done #recv() returns a string the_socket.setblocking(0) total_data=[];data='' begin=time.time() if not timeout: timeout=1 while 1: #if you got some data, then break after wait sec if total_data and time.time()-begin>timeout: break #if you got no data at all, wait a little longer elif time.time()-begin>timeout*2: break wait=0 try: data=the_socket.recv(4096) if data: total_data.append(data) begin=time.time() data='';wait=0 else: time.sleep(0.1) except: pass #When a recv returns 0 bytes, other side has closed result=''.join(total_data) return result