docs: def close(self):
          """
          Close the stream. This performs a proper stream shutdown, except if the
          stream is currently performing a TLS handshake. In that case, calling
          :meth:`close` is equivalent to calling :meth:`abort`.
  
          Otherwise, the transport waits until all buffers are transmitted.
          """
  
          if self._state == _State.CLOSED:
              self._invalid_state("close() called")
              return
  
          if self._state == _State.TLS_HANDSHAKING:
              # hard-close
              self._force_close(None)
          elif self._state == _State.TLS_SHUTTING_DOWN:
              # shut down in progress, nothing to do
              pass
          elif self._buffer:
              # there is data to be send left, first wait for it to transmit ...
              self._closing = True
          elif self._state.tls_started:
              # normal TLS state, nothing left to transmit, shut down
              self._tls_shutdown()
          else:
              # normal non-TLS state, nothing left to transmit, close
              self._raw_shutdown()