Skip to content

Commit 27546ea

Browse files
committed
asyncio_micro: Support readall semantics and handle non-blocking read() well.
Non-blocking read()/write() may return None if there's no data, and that's not EOF.
1 parent 875de44 commit 27546ea

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

asyncio_micro/asyncio_micro.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,13 @@ class StreamReader:
191191
def __init__(self, s):
192192
self.s = s
193193

194-
def read(self, n):
194+
def read(self, n=-1):
195195
s = yield IORead(self.s)
196-
res = self.s.read(n)
196+
while True:
197+
res = self.s.read(n)
198+
if res is not None:
199+
break
200+
log.warn("Empty read")
197201
if not res:
198202
yield IODone(IO_READ, self.s)
199203
return res
@@ -202,7 +206,11 @@ def readline(self):
202206
log.debug("StreamReader.readline()")
203207
s = yield IORead(self.s)
204208
log.debug("StreamReader.readline(): after IORead: %s", s)
205-
res = self.s.readline()
209+
while True:
210+
res = self.s.readline()
211+
if res is not None:
212+
break
213+
log.warn("Empty read")
206214
if not res:
207215
yield IODone(IO_READ, self.s)
208216
log.debug("StreamReader.readline(): res: %s", res)

0 commit comments

Comments
 (0)