2012-02-12 304 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

相關問題