1

我有一个想绑定到本地端点的 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
}

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

4

1 回答 1

2

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

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

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

感谢您的评论!

于 2012-07-18T12:53:56.883 回答