From c634dc5753f5df17b1b0d10604357573178862e7 Mon Sep 17 00:00:00 2001 From: ento Date: Thu, 11 Jan 2024 22:18:28 -0800 Subject: [PATCH] Support receiving into memoryview Python 3.11's asyncio.sslproto implementation may use a memoryview for the buffer https://github.com/python/cpython/commit/13c10bfb777483c7b02877aab029345a056b809c#diff-0ae38bdc337cc724282d20111dc780b8a9c07385c80476cf304d5b3c9ec306ecR431-R432 --- mocket/mocket.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mocket/mocket.py b/mocket/mocket.py index 909bd63..1693b0e 100644 --- a/mocket/mocket.py +++ b/mocket/mocket.py @@ -304,7 +304,14 @@ def read(self, buffersize): return rv def recv_into(self, buffer, buffersize=None, flags=None): - return buffer.write(self.read(buffersize)) + if hasattr(buffer, "write"): + return buffer.write(self.read(buffersize)) + else: + # buffer is a memoryview + data = self.read(buffersize) + if data: + buffer[: len(data)] = data + return len(data) def recv(self, buffersize, flags=None): if Mocket.r_fd and Mocket.w_fd: