我有一个简单的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);
......它会成功 - 通常是在失败后的第二次尝试。
答案 0 :(得分:2)
昨天我一步一步地调试set_option,set_option使用io_service_impl对象但它包含错误的套接字指针的问题,这就是它崩溃的原因。但是在套接字创建时没有设置此套接字,所以我认为你不能以这种方式在套接字上设置选项。
您必须在set_option之前打开套接字,在async_connect
和set_option
之前尝试此操作:
sock->open(boost::asio::ip::tcp::v4());
错误称为Bad file descriptor
,它在set_option调用上指向未初始化的套接字。