1

プログラムで「ワーカー スレッドごとの各 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 (ブースト 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 のバグであり、バグトラッカーに送信する必要があります。よろしいですか?

4

1 に答える 1

3

スレッドの 1 つで 1 つのアクセプターを使用する必要があるためです。代わりに、2 つのアクセプターを作成しました。

したがって、1 つのアクセプターを実行し、異なる に異なる接続セッションを分散する必要がありますio_service

ノート:

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

スレッドを実行しません...

例を読み直して理解しよう

于 2012-02-12T13:31:39.617 に答える