code: async def _readline(self, timeout: NumType = None):
          
          if self._stream_reader is None or self._stream_writer is None:
              raise SMTPServerDisconnected("Client not connected")
  
          read_task = asyncio.Task(
              self._stream_reader.readuntil(separator=b"\n"), loop=self._loop
          )
          try:
              line = await asyncio.wait_for(
                  read_task, timeout, loop=self._loop
              )  # type: bytes
          except asyncio.LimitOverrunError:
              raise SMTPResponseException(
                  SMTPStatus.unrecognized_command, "Line too long."
              )
          except asyncio.TimeoutError as exc:
              raise SMTPTimeoutError(str(exc))
          except asyncio.IncompleteReadError as exc:
              if exc.partial == b"":
                  # if we got only an EOF, raise SMTPServerDisconnected
                  raise SMTPServerDisconnected("Unexpected EOF received")
              else:
                  # otherwise, close our connection but try to parse the
                  # response anyways
                  self._stream_writer.close()
                  line = exc.partial
  
          return line
docs: Wraps reader.readuntil() with error handling.