提升asio unix socket重用

时间:2012-02-12 13:25:33

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

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

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)时,我看到了对acceptor构造函数的描述:

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

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

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

这是一个提升asio bug,我应该将它发送给bugtracker,我是对的吗?

1 个答案:

答案 0 :(得分:3)

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

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

注意:

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

不运行任何线程......

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