pub async fn interact<IO, Cfg>(
    io: IO,
    is_already_tls: IsAlreadyTls,
    metadata: Cfg::ConnectionUserMeta,
    cfg: Arc<Cfg>
) -> Result<()> where
    IO: 'static + Send + AsyncRead + AsyncWrite,
    Cfg: Config