Fix issue #183 (CPU 100% usage)

As per http://docs.python.org/2/howto/sockets.html#using-a-socket it's
possible that a socket recv() call returns 0 bytes if the remote closes
the connection. In that case, recv() does not obey settimeout(): it
just doesn't block and returns zero bytes immediately, which in this
case results in an infinite loop if the transmission was incomplete.
master
Pedro Gimeno 11 years ago
parent bfdb04716a
commit 95a1afb84b

@ -66,7 +66,10 @@ class receiveDataThread(threading.Thread):
shared.printLock.release()
while True:
try:
dataLen = len(self.data)
self.data += self.sock.recv(4096)
if len(self.data) == dataLen: # recv returns 0 bytes when the remote closes the connection
raise Exception("Remote closed the connection")
except socket.timeout:
shared.printLock.acquire()
print 'Timeout occurred waiting for data from', self.HOST + '. Closing receiveData thread. (ID:', str(id(self)) + ')'

Loading…
Cancel
Save