提升::ASIO set_option错误
boost::asio set_option error
我有一个简单的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);
。它会成功 - 通常在失败后的第二次尝试中。
昨天我逐步调试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调用时直接指向未初始化的套接字。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 即使关闭CLR选项,"cannot compile C file <file> with /clr option"也收到错误D8045
- Qt:带有Qt OSX Yosemite的CUDA "sed: illegal option -- r"错误
- 'ld: unknown option: -rpath=./libs' - 在 Mac OS 10.7.5 上构建 OpenFramework 插件时出现链接错误