diff --git a/Lib/asynchat.py b/Lib/asynchat.py --- a/Lib/asynchat.py +++ b/Lib/asynchat.py @@ -132,6 +132,8 @@ if isinstance(data, str) and self.use_encoding: data = bytes(str, self.encoding) + if data == '': + return self.ac_in_buffer = self.ac_in_buffer + data # Continue to search for self.terminator in self.ac_in_buffer, diff --git a/Lib/asyncore.py b/Lib/asyncore.py --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -59,6 +59,8 @@ _DISCONNECTED = frozenset((ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE, EBADF)) +_RETRY = frozenset((EWOULDBLOCK, EAGAIN)) + try: socket_map @@ -389,6 +391,8 @@ if why.args[0] in _DISCONNECTED: self.handle_close() return b'' + elif why.args[0] in _RETRY: + return b'' else: raise