Retry sock.recv() when it raises EINTR
This commit is contained in:
@@ -69,7 +69,7 @@ Best Practices:
|
||||
|
||||
__author__ = "Charles Gordon"
|
||||
|
||||
|
||||
import errno
|
||||
import socket
|
||||
import six
|
||||
|
||||
@@ -1056,7 +1056,7 @@ def _readline(sock, buf):
|
||||
chunks.append(buf)
|
||||
last_char = buf[-1:]
|
||||
|
||||
buf = sock.recv(RECV_SIZE)
|
||||
buf = _recv(sock, RECV_SIZE)
|
||||
if not buf:
|
||||
raise MemcacheUnexpectedCloseError()
|
||||
|
||||
@@ -1087,7 +1087,7 @@ def _readvalue(sock, buf, size):
|
||||
if buf:
|
||||
rlen -= len(buf)
|
||||
chunks.append(buf)
|
||||
buf = sock.recv(RECV_SIZE)
|
||||
buf = _recv(sock, RECV_SIZE)
|
||||
if not buf:
|
||||
raise MemcacheUnexpectedCloseError()
|
||||
|
||||
@@ -1104,3 +1104,13 @@ def _readvalue(sock, buf, size):
|
||||
chunks.append(buf[:rlen - 2])
|
||||
|
||||
return buf[rlen:], b''.join(chunks)
|
||||
|
||||
|
||||
def _recv(sock, size):
|
||||
"""sock.recv() with retry on EINTR"""
|
||||
while True:
|
||||
try:
|
||||
return sock.recv(size)
|
||||
except IOError as e:
|
||||
if e.errno != errno.EINTR:
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user