クライアントが接続するために特定のポートで待機するTCP
サーバーがあります。Boost :: ASIO:複数のスレッドでtcp :: socketを使用する
クライアント接続が1つの場合は、asio::io_service
のtcp::socket
オブジェクトを作成し、そのソケットを受け入れます。例:
void Gateway::server(boost::asio::io_service& io_service, unsigned short port) {
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
bool UARTToWiFiGatewayStarted = false;
for (;;) {
tcp::socket sock(io_service);
a.accept(sock);
std::thread(startWiFiToUARTSession, std::move(sock)).detach();
if(false == UARTToWiFiGatewayStarted) {
//std::thread(startUARTToWifiSession, std::move(sock2)).detach();
UARTToWiFiGatewayStarted = true;
}
}
}
今私は1つのスレッドがソケット(read_some(...)
)から(ブロッキング)読みになり、他のスレッドがあることを利用して(ブロック)のデータを書き込む必要があり、少なくとも二つのスレッド上でこのソケットの機能を使用したいですソケット。
同じasio::io_service
オブジェクトを使用して2つのtcp::socket
オブジェクトを作成しようとしましたが、動作しません。
アイデア?
"うまくいかない"とはどういう意味ですか? – Xirema
「少なくとも2つのスレッドでこのソケットの機能を使用する」 - 単一のクライアントと同じ接続を意味しますか? –
各 'tcp :: socket'オブジェクトは個別のネイティブソケットを参照する必要があります。単一のTCP接続に二つの 'tcp :: socket'オブジェクトを使いたいという動機づけを説明できますか? –