我有一个要绑定(bind)到本地端点的 TCP 套接字。
我有两种情况:
- 将套接字连接到未使用且不等待连接的本地端点。
- 将套接字连接到在上一次运行中使用/未正确关闭的本地端点。
我曾经使用其构造函数将 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/