asio 异步TCP客户端,切换ip失败

编写了一个异步TCP程序,目标服务器可能有多个,使用过程中需要切换ip,但是却无法进行切换ip进行连接。省略了部分代码,关键代码如下:

//首先关闭旧连接
    m_clientSocket->shutdown( asio::ip::tcp::socket::shutdown_both, ec );
    m_clientSocket->close();
//然后关闭事件循环
m_ioService.stop();

    std::thread::id threadId = std::this_thread::get_id();
    for ( auto& worker : m_workerThreads )
    {
        if ( ( threadId != worker.get_id() ) && worker.joinable() )
        {
            worker.join();
        }
    }

//切换服务器ip和端口
                m_serverIp = svrIp;
        m_serverPort = std::to_string(svrPort);
        asio::ip::tcp::resolver resolver_( m_ioService );
        //域名或ip/port解析
        asio::ip::tcp::resolver::query query( m_serverIp /*域名 or ip*/, m_serverPort/*服务(协议) or port*/ );
        m_serverEndpoints = resolver_.resolve( query );

//进行连接
                        std::vector< std::string >::iterator iter;
                        //....
                        asio::ip::tcp::endpoint end_point( asio::ip::address::from_string( *iter ), 0 );
            m_clientSocket->open( end_point.protocol(), ec );
            if ( ec )
            {

                iter++;
                continue;
            }

            m_clientSocket->set_option( asio::socket_base::reuse_address() );
            m_clientSocket->bind( end_point );
            if ( ec )
            {

                iter++;
                continue;
            }
            //建立连接(同步)
            m_clientSocket->connect( *epIter, ec );

            //每次的切换IP结果都是sock是无法打开的
             //连接断开
    if ( !( m_clientSocket->is_open() ) )//如果成功会打开。
    {
                //切换ip的结果 open error

        }

        //重新开启事件循环
        m_workerThreads.clear();
    // 创建、启动io_service线程      emplace_back会调用构造函数。所以自动会构造一个线程。
    m_workerThreads.emplace_back( [ this ](){
        m_ioService.reset();
        m_ioService.run();
    } );

https://www.cnblogs.com/jiayayao/p/6262771.html