code: def _read_loop(self, data=''):
          
          while True:
              if not self.is_connected or self.is_connecting or self.io.closed():
                  break
  
              try:
                  yield self.io.read_bytes(
                      DEFAULT_READ_CHUNK_SIZE,
                      streaming_callback=self._ps.parse,
                      partial=True)
              except tornado.iostream.StreamClosedError as e:
                  self._err = e
                  if self._error_cb is not None and not self.is_reconnecting and not self.is_closed:
                      self._error_cb(e)
                  break
docs: Read loop for gathering bytes from the server in a buffer
          of maximum MAX_CONTROL_LINE_SIZE, then received bytes are streamed
          to the parsing callback for processing.