From 15cc7aa7b7b3f8023842a66c5513524c94e57568 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 7 May 2014 02:12:29 +0300 Subject: [PATCH] asyncio_micro: Implement proper write() handling. TODO: Test! --- asyncio_micro/asyncio_micro.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/asyncio_micro/asyncio_micro.py b/asyncio_micro/asyncio_micro.py index e8dcf629..f7ddb921 100644 --- a/asyncio_micro/asyncio_micro.py +++ b/asyncio_micro/asyncio_micro.py @@ -223,10 +223,19 @@ class StreamWriter: self.s = s def write(self, buf): - res = self.s.write(buf) - log.debug("StreamWriter.write(): %d", res) - s = yield IOWrite(self.s) - log.debug("StreamWriter.write(): returning") + sz = len(buf) + while True: + res = self.s.write(buf) + log.debug("StreamWriter.write(): %d", res) + # If we spooled everything, (just) return + if res == sz: + return + if res is None: + res = 0 + buf = buf[res:] + sz -= res + s = yield IOWrite(self.s) + log.debug("StreamWriter.write(): can write more") def close(self): yield IODone(IO_WRITE, self.s)