2012-02-12 306 views
1

我想在程序中使用“每个工作线程的每个io_service”设计。但我无法重用unix插槽:boost asio 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)时,我看到接受者的构造函数的描述:

这个构造函数创建一个acceptor并自动打开它来侦听指定端点上的新连接。

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

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

这是一个助力asio错误,我应该把它发送给错误跟踪器,对不对?

回答

3

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

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

注:

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

不运行任何线程...

重读的例子,并试图了解他们

+0

的感谢!真的只有一个接受者。我找到了一个很好的例子http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/http/server2/server.cpp – puchu 2012-02-12 13:37:21

+0

我的示例没有运行任何线程是正常的:exception被扔进第二个构造者,我解决了不要混淆一个问题。谢谢 – puchu 2012-02-12 13:47:05

相关问题