如何使用boost asio在未连接的端点上区分繁忙端点

时间:2012-07-18 07:46:42

标签: c++ windows tcp boost-asio

我有一个TCP套接字,我想绑定到本地端点。

我有两种情况:

  1. 将套接字连接到未使用且未等待连接的本地端点。
  2. 将套接字连接到在上一次运行中使用/未正确关闭的本地端点。
  3. 我曾经使用它的构造函数初始化接受器,传递io_service和端点,但是当它尝试连接到使用的端点时,接受器崩溃了。

    acceptor_(io_service_, endpoint)
    

    我接下来要做的是将构造函数更改为仅获取io_service(承诺不会打开套接字)。

    acceptor_(io_service_)
    

    我看到asio有一个bind()函数,它将套接字与本地端点绑定在一起。 函数bind()有一个参数,指示是否发生了错误,但对于上述两种情况,它都返回相同的错误。

    boost::system::error_code ec;
    acceptor_.bind(endpoint, ec);
    
    if(ec)
    {
        // SOME ERROR NOTIFYING
    // EDIT: error code returned is 10009
    }
    

    有没有办法连接到端点并为这类错误获取不同的错误?

1 个答案:

答案 0 :(得分:2)

我使用的接受器的套接字实际上无效。

根据boost的代码(位于:boost asio implementation),我看到接收io_service和endpoint的构造函数使用端点本身的协议打开套接字,然后才将它与接受器绑定。

解决方案是仅使用io_service初始化接受器,然后打开接受器,然后将端点绑定到它。

感谢您的评论!