我有一個簡單的boost::asio::ip::tcp::acceptor
,它幾乎不做任何事 - 它接受無限循環中的連接。然後,我有一些在同一時間運行嘗試連接的連接器...boost :: asio set_option error
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);
...它會成功 - 通常在第二次嘗試失敗後。
你在用什麼編譯器? –
@SamMiller Visual Studio 2010 – David
這聽起來像是比賽條件。確保你永遠不會嘗試從多個線程同時訪問你的套接字。 –