diff --git a/memcached/python_modules/memcached.py b/memcached/python_modules/memcached.py index 07715458..f6bcff08 100755 --- a/memcached/python_modules/memcached.py +++ b/memcached/python_modules/memcached.py @@ -8,6 +8,7 @@ import time import socket import select +import errno descriptors = list() Desc_Skel = {} @@ -78,18 +79,27 @@ def update_metric(self): sock.send("stats\r\n") while True: - rfd, wfd, xfd = select.select([sock], [], [], self.timeout) - if not rfd: - print >>sys.stderr, "ERROR: select timeout" - break - - for fd in rfd: - if fd == sock: - data = fd.recv(8192) - msg += data - - if msg.find("END"): - break + try: + rfd, wfd, xfd = select.select([sock], [], [], self.timeout) + + if not rfd: + print >>sys.stderr, "ERROR: select timeout" + break + + for fd in rfd: + if fd == sock: + try: + data = fd.recv(8192) + msg += data + except (IOError, OSError), e: + if e.errno != errno.EINTR: + raise + + if msg.find("END"): + break + except select.error, e: + if e[0] != errno.EINTR: + raise sock.close() except socket.error, e: