2012-02-12 5 views
1

Я хочу использовать «каждый дизайн io_service для рабочего потока» в моей программе. Но я не могу повторно использовать гнездо unix:boost asio unix socket reuse

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) 

Это сообщение об ошибке asio, и я должен отправить его в bugtracker, я прав?

ответ

3

Потому что вы должны использовать 1 акцептор на одном из потоков. Вместо этого вы создали два акцептора.

Таким образом, вам нужно запустить 1 акцептор и развернуть различные сеансы связи на разных io_service с.

Примечание:

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

+0

это нормально, что мой пример не запускает ни одного потока: исключение был брошен во втором конструкторе, и я решил не загромождать вопрос. благодаря – puchu

 Смежные вопросы

  • Нет связанных вопросов^_^