code: async def recv_multipart(self):
          
          if not self._sockets:
              return []
  
          results = []
  
          async def recv_and_store(socket):
              frames = await socket.recv_multipart()
              results.append((socket, frames))
  
          tasks = [
              asyncio.ensure_future(recv_and_store(socket), loop=self.loop)
              for socket in self._sockets
          ]
  
          try:
              await asyncio.wait(
                  tasks,
                  return_when=asyncio.FIRST_COMPLETED,
                  loop=self.loop,
              )
          finally:
              for task in tasks:
                  task.cancel()
  
          return results
docs: Read from all the associated sockets.
  
          :returns: A list of tuples (socket, frames) for each socket that
              returned a result.