Skip to content

Commit 2e6533e

Browse files
author
Tony Crisci
authored
Merge pull request #189 from sn4kebite/aio-message-recv
aio: Read all message_length bytes from message response
2 parents e8798bb + b7396a3 commit 2e6533e

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

i3ipc/aio/connection.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ async def do_reconnect():
433433

434434
return self._reconnect_future
435435

436-
async def _message(self, message_type: MessageType, payload: str = '') -> bytes:
436+
async def _message(self, message_type: MessageType, payload: str = '') -> bytearray:
437437
if message_type is MessageType.SUBSCRIBE:
438438
raise Exception('cannot subscribe on the command socket')
439439

@@ -452,14 +452,23 @@ async def _message(self, message_type: MessageType, payload: str = '') -> bytes:
452452
await self._reconnect()
453453

454454
if not buf:
455-
return b''
455+
return bytearray()
456456

457457
magic, message_length, reply_type = _unpack_header(buf)
458458
assert reply_type == message_type.value
459459
assert magic == _MAGIC
460460

461461
try:
462-
message = await self._loop.sock_recv(self._cmd_socket, message_length)
462+
message = bytearray()
463+
remaining_length = message_length
464+
while remaining_length:
465+
buf = await self._loop.sock_recv(self._cmd_socket, remaining_length)
466+
if not buf:
467+
logger.error('premature ending while reading message (%s bytes remaining)',
468+
remaining_length)
469+
break
470+
message.extend(buf)
471+
remaining_length -= len(buf)
463472
except ConnectionError as e:
464473
if self._auto_reconnect:
465474
ensure_future(self._reconnect())

0 commit comments

Comments
 (0)