【问题标题】:boost asio unix socket reuse提升 asio unix 套接字重用
【发布时间】:2012-03-04 04:22:15
【问题描述】:

我想在我的程序中使用“每个工作线程的每个 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(提升 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 错误,我应该将它发送给 bugtracker,对吗?

【问题讨论】:

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


    【解决方案1】:

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

    所以你需要运行 1 个接受器并在不同的io_services 上传播不同的连接会话。

    注意:

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

    不运行任何线程...

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多