如何使用boost-asio区分繁忙端点和未连接端点

how to differ a busy endpoint over a not connected one using boost asio

本文关键字:端点 连接端点 何使用 boost-asio      更新时间:2023-10-16

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

我有两个场景:

  1. 将套接字连接到未使用且未等待连接的本地终结点
  2. 将套接字连接到在上一次运行中使用/未正确关闭的本地终结点

我曾经使用它的构造函数来初始化接收器,该构造函数将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
}

有没有一种方法可以连接到端点并为这类错误获取不同的错误?

我使用的接收器的套接字确实无效。

根据boost的代码(位于:boost-asioimplementation),我看到接收io_service和endpoint的构造函数使用来自endpoint本身的协议打开套接字,然后才将其与接收器绑定。

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

感谢您的评论!