docs: def readLine(self):
          """ read a line
          Maintains its own buffer, callers of the transport should not mix
          calls to readBytes and readLine.
          """
          if self.buf is None:
              self.buf = []
  
          # Buffer may already have a line if we've received unilateral
          # response(s) from the server
          if len(self.buf) == 1 and b"\n" in self.buf[0]:
              (line, b) = self.buf[0].split(b"\n", 1)
              self.buf = [b]
              return line
  
          while True:
              b = self.readBytes(4096)
              if b"\n" in b:
                  result = b"".join(self.buf)
                  (line, b) = b.split(b"\n", 1)
                  self.buf = [b]
                  return result + line
              self.buf.append(b)