gpt4 book ai didi

c++ - 发送到 : An invalid argument was supplied

转载 作者:行者123 更新时间:2023-11-28 07:33:43 26 4
gpt4 key购买 nike

我正在尝试使用 boost::asio 库在网络上发送原始 TCP 数据包。我的程序在 Mac OS X 10.8 上运行良好,但是当我在 Windows 7 下运行该程序时,出现异常(在控制台中):Error: send_to: An invallid argument was supplied.打开套接字的代码和send_to()方法是:

try {
socket_.open();
socket_.send_to(request_buffer.data(), ep);
} catch (std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}

定义端点:

    ip::address_v4::bytes_type b = {{XXX, XXX, XXX, XXX}};
ip::raw::endpoint ep(boost::asio::ip::address_v4(b), (portnumber);

如何解决异常,使程序可以在Windows下运行?在 Visual Studio 2010 的输出窗口中,异常是:

First-chance exception at 0x000007fefcce9e5d (KernelBase.dll) in (programname).exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > at memory location 0x0,...

最佳答案

似乎 RAW TCP 套接字在 Windows 7 中被阻止 (http://msdn.microsoft.com/nl-nl/library/windows/desktop/ms740548(v=vs.85).aspx)。使用此链接 (http://www.savarese.com/software/rocksaw/#Q4),故事已得到证实,为了在 Windows 上通过原始套接字写入 TCP 数据包:您必须使用 IPPROTO_IP 或 IPPROTO_RAW 打开套接字。然后您必须设置 IP_HDRINCL 套接字选项并填充每个数据包的 IP 和 TCP header 。就 RockSaw 而言,这意味着在 Windows 上您必须使用 RawSocket.getProtocolByName("ip") 和 setIPHeaderInclude(true)。

因此使用 Boost::Asio 似乎不可能发送带有自己的 IP header 和自定义 TCP 数据包的数据包(请参阅上面评论中提到的 Kevin Conley 的 github)

关于c++ - 发送到 : An invalid argument was supplied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17147867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com