utilizando bytearray con socket.recv_into

Estoy haciendo algo de socket IO, y usando un objeto bytearray como un búfer. Me gustaría recibir datos con un desplazamiento en este búfer utilizando csock.recv_into como se muestra a continuación para evitar la creación de objetos de cadena intermedios. Desafortunadamente, parece que los bytearrays no se pueden usar de esta manera, y el siguiente código no funciona.

buf    = bytearray(b" " * toread)
read   = 0
while(toread):
  nbytes = csock.recv_into(buf[read:],toread)
  toread -= nbytes
  read   += nbytes

Así que en lugar de eso estoy usando el siguiente código, el cualhace usar una cadena temporal (y funciona) ...

buf    = bytearray(b" " * toread)
read   = 0
while(toread):
  tmp = csock.recv(toread)
  nbytes = len(tmp)
  buf[read:] = tmp
  toread -= nbytes
  read   += nbytes

¿Hay una forma más elegante de hacerlo que no requiera copiar cadenas intermedias?

Respuestas a la pregunta(1)

Su respuesta a la pregunta