c++ - boost asio unix 套接字重用

标签 c++ networking boost boost-asio unix-socket

我想在我的程序中使用“每个工作线程每个 io_service”设计。但我不能重用 unix 套接字:

io_service io_1;
io_service io_2;
::unlink("/tmp/test");
stream_protocol::endpoint ep("/tmp/test");
stream_protocol::acceptor acceptor_1(io_1, ep, true);
stream_protocol::acceptor acceptor_2(io_2, ep, true);
io_1.run();
io_2.run();

因“地址已被使用”而失败。当我打开我的 asio/basic_socket_acceptor.hpp (boost 1.46.1) 时,我看到了接受器构造函数的描述:

此构造函数创建一个接受器并自动打开它以监听指定端点上的新连接。

@param reuse_addr 构造函数是否应该设置套接字选项socket_base::reuse_address。

basic_socket_acceptor(boost::asio::io_service& io_service, 
    const endpoint_type& endpoint, bool reuse_addr = true)

这是一个 boost asio 的错误,我应该将它发送给错误跟踪器,对吗?

最佳答案

因为您应该在其中一个线程上使用 1 个接受器。相反,您创建了两个接受器。

因此您需要运行 1 个接受器并在不同的 io_service 上传播不同的连接 session 。

注意:

io_1.run();
io_2.run();

不运行任何线程...

重新阅读示例并尝试理解它们

关于c++ - boost asio unix 套接字重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249123/

相关文章:

java - 客户端已连接,但无法向服务器发送消息。[控制台聊天]

python - 如何让 bjam 检测我在 Windows 上安装的 Python?

c++ - 在 Debug模式下执行控制台应用程序后,如何让 Visual Studio 暂停?

c++ - 使用boost python嵌入python时导入错误

c++ - QtCreator 构建返回 collect2 : ld returned exit status 1

c++ - Neon/RPi 上的 64 位 DSP 滤波性能优化

iphone - 如何避免两次握手服务器客户端/客户端服务器连接

java - 制作一个java程序来通知我的方法

c++ - 如何使用 boost.log 写入文件?

c++ - boost::property_tree 无一异常(exception)