c++ - 如何使用 boost asio 将繁忙的端点与未连接的端点区分开来

标签 c++ windows tcp boost-asio

我有一个要绑定(bind)到本地端点的 TCP 套接字。

我有两种情况:

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

我曾经使用其构造函数将 io_service 和端点传递给它来初始化接受器,但是当它尝试连接到使用的端点时,接受器崩溃了。

acceptor_(io_service_, endpoint)

接下来我要做的是更改构造函数以仅获取 io_service(它保证不会打开套接字)。

acceptor_(io_service_)

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

boost::system::error_code ec;
acceptor_.bind(endpoint, ec);

if(ec)
{
    // SOME ERROR NOTIFYING
// EDIT: error code returned is 10009
}

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

最佳答案

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

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

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

感谢评论!

关于c++ - 如何使用 boost asio 将繁忙的端点与未连接的端点区分开来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536590/

相关文章:

bash - 如何从/dev/tcp 捕获 Bash 中的错误?

java - Java 中的非阻塞套接字写入与阻塞套接字写入

c++ - std::string/引用计数/const

c++ - 在这个简单的哈希实现中**在做什么?

获取 native 指针时出现 C++ 错误 C2440

c - 如何在我的控制台应用程序 (C) 中使用颜色?

windows - CMD 全屏 Visual Studio

mysql - 如何消除 BIRT 中的网络错误(TCP_ERROR)?

c++ - 带有 char const* 的可变参数模板

c++ - WaitForMultipleObjects 在 64 位 Windows 上崩溃