如何通过 boost::asio 从send_to获取特定的错误详细信息?
How do I get specific error details from send_to by boost::asio?
我想通过boost::asio原始套接字发送TCP消息。 我的数据包基于以下来源:https://github.com/pfpacket/SYN-flood
我检查了 IP 和 TCP 数据包生成器的二进制输出,这些消息看起来有效。此外,TCP 的原始套接字函数看起来也不错。
45 10 00 28 00 00 40 00
40 06 A5 18 08 08 08 08
0B 0B 07 01 11 AD 15 B3
00 00 17 AA 00 00 00 00
50 02 10 00 3E BD 00 00
无论如何,如果我通过send_to函数将其发送到套接字,则会收到错误:
send_to: Ein ungültiges Argument wurde angegeben
英文翻译:"使用了无效的参数"
我不知道哪里有问题。我需要有关相关问题的更多详细信息。
如何从 send_to() 接收更具体的错误消息?接下来我能做什么?
int main() {
this->port = "5555";
this->target = "11.11.7.1";
try {
boost::asio::io_service io_service;
raw_tcp::socket socket(io_service, raw_tcp::v4());
socket.set_option(boost::asio::ip::ip_hdrincl(true));
raw_tcp::resolver resolver(io_service);
raw_tcp::resolver::query query( this->target , boost::lexical_cast< std::string >( this->port ));
raw_tcp::endpoint destination = *resolver.resolve( query );
boost::asio::streambuf request_buffer;
std::ostream os(&request_buffer);
//creates the ipheader and tcp packet and forward it to buffer os
set_syn_segment(os);
socket.send_to(request_buffer.data(), destination);
} catch (std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
}
Asio 的错误检测和报告是一个相当薄的层,通常传播底层系统调用提供的所有信息。 失败时,如果应用程序能够接收boost::system::error_code
,Asio 将填充它,例如异步操作或使用error_code
参数的同步操作重载;否则,它将抛出包含error_code
的异常。 文档明确提到了异步操作,但相同的"好像">行为通常适用于同步操作:
除非另有说明,否则当异步操作的行为定义为"好像"由 POSIX 函数实现时,将使用
error_code
类型的值调用处理程序,该值对应于 POSIX 为该函数描述的失败条件(如果有)。否则,将使用反映操作系统错误的实现定义的error_code
值调用处理程序。异步操作不会失败,并显示指示信号中断的错误条件 (POSIX
EINTR
)。异步操作不会因与非阻塞操作(POSIXEWOULDBLOCK
、EAGAIN
或EINPROGRESS
相关的任何错误条件而失败;视窗WSAEWOULDBLOCK
或WSAEINPROGRESS
)。
若要进一步调查错误,请考虑使用 BSD API 映射文档来确定正在进行哪些操作系统调用。 然后,可以使用相应的操作系统文档来确定发生错误的条件和值。 错误代码和Boost.Asio错误代码之间的映射位于asio/error.hpp
内,但映射通常相当简单。
在sendto()
的情况下,返回值EINVAL
可能不会提供有见地的信息。 可以通过附加调试器并在 Asio 对sendto()
进行系统调用时检查有效性参数来进一步诊断问题。
- std::extent 实现详细信息说明
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- protobuf,如何在protobuf消息中遍历所有集合字段,我不知道详细信息?(C++)
- AVX2收集指令使用详细信息
- 只知道运行时的数据类型.如何将数据详细信息隐藏到使用它们的其他类
- CppUnit:如何立即打印故障详细信息
- 我可以为 C++ 类提供不完整的标头以隐藏实现详细信息吗?
- CPP 异常获取抛出调用方的详细信息
- 内存映射 IO 概念详细信息
- 如何在文本文件中搜索员工记录(按名称)并仅显示其详细信息?
- 使用TDD时隐藏文件访问实现详细信息
- 急需有关_doserrno(MSVC)的详细信息
- 主 - Embarcadero C++生成器 10.2 中的详细信息数据集
- 如果构造函数从调用到 std::make_shared 崩溃,GDB 是否可以显示崩溃的详细信息
- 实现 std::tuple 的详细信息
- 如何使 clang 格式将所有详细信息命名空间缩进一个
- 如何通过 boost::asio 从send_to获取特定的错误详细信息?
- 如何获取有关protobuf解析过程中生成的错误的更多详细信息?(C++)
- SIGSEGV 错误详细信息和删除步骤