zhllxt / asio2

Header only c++ network library, based on asio,support tcp,udp,http,websocket,rpc,ssl,icmp,serial_port,socks5.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rpc client 使用 local_endpoint(...) 后,无法重新绑定端口

RealMG opened this issue · comments

第一次Startup(...)会成功,Shutdown()后,再次使用相同的参数Startup会报错,如不调用local_endpoint(...),目前来看没什么问题,但是请问该如何设置本地端口?

    p_bool RpcTerminal::Startup(const p_string& host, const p_string& port, const p_string& local_port)
    {
        if (rpc_client_ == p_nullptr)
        {
            rpc_client_ = std::make_unique<asio2::rpc_client>();
        }

        rpc_client_->default_timeout(std::chrono::seconds(kDefaultRpcClientCallTimeoutInSec));

        if (rpc_client_->is_started())
        {
            return true;
        }

        rpc_client_->local_endpoint(asio::ip::tcp::v4(), atoi(local_port.c_str()));

        //TODO: Implement the callbacks.
        rpc_client_->bind_connect([&](asio::error_code ec) {})
            ;

        return rpc_client_->start(host, port);
    }

    void RpcTerminal::Shutdown()
    {
        if (rpc_client_ != p_nullptr)
        {
            rpc_client_->stop();
            rpc_client_ = p_nullptr;
        }
    }

测试不适用local_endpoint设置端口,可以在server端看到client端口号,在client端Shutdown()后,可以netstat出对应的端口一直在TIME_WAIT状态。