将 boost asio 绑定到本地 tcp 端点

PMi*_*ler 3 networking boost bind interface boost-asio

我正在尝试将 boost asio tcp 套接字专门绑定到本地网络接口。什么时候是bind()在套接字上调用方法的正确时间?

_endpoint 指向远程 IP/端口,例如 192.168.0.15:8888。

// Invoke async. connect. Immediate return, no throw.
_socket.async_connect(_endpoint,
boost::bind(&MyTransceiver::handleConnect, this,
    boost::asio::placeholders::error));
Run Code Online (Sandbox Code Playgroud)

在 中MyTransceiver::handleConenct(),我尝试了以下代码:

boost::asio::ip::tcp::endpoint local_end_point(
        boost::asio::ip::address::from_string("192.168.0.55"), 6543 );

    _socket.bind(local_end_point);
Run Code Online (Sandbox Code Playgroud)

在这里调用它失败,在async_connect() 调用之前调用它,还有一个“无效句柄”异常。

小智 6

好像信息不够。但一般来说,你应该:

_socket->打开()

_socket->set_option()

_socket->绑定()

_socket->async_connect()

在 handleConnect(): _socket->async_read_some()