私はほとんど何もしない単純なものを持ってboost::asio::ip::tcp::acceptor
います - それは無限ループで接続を受け入れます。次に、接続しようとして同時に実行されている多くのコネクタがあります...
pSocket->async_connect(endpoint,
[=](boost::system::error_code error)
{
if(!error)
{
boost::asio::ip::tcp::no_delay noDelay(true);
pSocket->set_option(noDelay, error);
assert(!error);
std::cout << error.message() << '\n'; // "An invalid argument was supplied"
}
});
すべてが無限ループで実行されており、2 つのクライアントと 1 つのサーバーをすべてループバック接続で実行しています。no_delay
接続されたソケットでオプションを設定すると、しばらくして(数百回の成功した接続と切断) 、エラーが発生しますAn invalid argument was supplied
。
ソケットにオプションを設定すると、どのような状況でこのエラーが発生する可能性がありますか? 誰もこれを以前に見たことがありますか?なぜそれが起こっているのか、および/またはそれを修正する方法を知っていますか?
更新:
セットset_option
を次のように変更すると...
do
{
pSocket->set_option(noDelay, error);
} while(error);
...成功します-通常、失敗した後の2回目の試行で。