<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def recvfrom(self):
 """ Receive the next datagram. The return value is a `(bytes, component)` tuple where `bytes` is a bytes object representing the data received and `component` is the component on which the data was received. If the connection is not established, a `ConnectionError` is raised. """

        if not len(self._nominated):
            raise ConnectionError('Cannot receive data, not connected')

        result = await self._queue.get()
        if result[0] is None:
            raise ConnectionError('Connection lost while receiving data')
        return result