увеличить использование сокетов asio unix - PullRequest
1 голос
/ 12 февраля 2012

Я хочу использовать дизайн "каждый io_service на рабочий поток" в моей программе. Но я не могу повторно использовать сокет 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), я вижу описание для конструктора акцептора:

Этот конструктор создает акцептор и автоматически открывает его для прослушивания новых соединений в указанной конечной точке.

@ 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 bug, и я должен отправить его багтрекеру, я прав?

1 Ответ

3 голосов
/ 12 февраля 2012

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

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

Примечание:

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

Не запускается ни один поток ...

Перечитайте примеры и попытайтесь их понять

...