boost::asio error for UDP async_receive
boost::asio error for UDP async_receive
我遇到了一个来自boost::asio的奇怪错误。我正在实现TFTP服务器的一半(仅限服务器->客户端)。我在第一个套接字的端口69上获得第一个RRQ数据包,然后创建另一个套接字来执行DATA、ACK交换。我在那个套接字上启动一个async_receive(),然后对第一个数据包执行send()。然后,我得到了接收的处理程序回调(我假设ACK来了),它给出了错误"由于目标机器主动拒绝,无法建立连接",我从另一个线程了解到,这意味着error_PORT_UNREACHABLE。
我真的不明白一个接收电话怎么会导致一个不可访问的错误,因为我没有联系到任何东西,我正在接收。我检查了send()的结果,没有错误。
我检查了套接字中的本地和远程端点(在错误发生之前和之后),它们都有正确的IP地址和端口。
有什么想法吗?我在谷歌上搜索过,找不到其他人有这个问题。大多数结果都让我找到了stackoverflow,所以我在这里问。
编辑--我的问题是我正在使用调试器。当我抽出时间发送第一个数据包时,在客户端在大约一秒钟内发送了十几个请求后,客户端超时并放弃了,我的数据太晚了。当我在没有断点的情况下运行时,它运行得很好。感谢大家的建议。正是通过观察Wireshark中的数据包给了我线索
发送成功的原因是因为发送只是指示数据包已提供给操作系统。特别地,操作系统然后将该数据包发送到目的地,并用指示主机未在侦听的IP数据包进行响应。然后,操作系统接收到它,并在套接字上设置一个标志,导致下一次读取失败。由于您已经在执行异步接收,它会导致接收返回错误。
如果可能的话,我强烈建议使用wireshark或类似的东西来观察UDP交换,看看你是否能发现任何其他问题。我不熟悉TFTP协议,也不能在那里提供太多输入。
- 为什么std::async使用同一个线程运行函数
- 为什么可以将左值传递给"std::async",即使它引用了右值
- 使用用户定义的参数调用future/async并调用类方法
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 使用 std::async 时死锁,将来作为成员
- 为什么我不能将引用作为 std::async 的函数参数传递
- std::async from std::async in windows xp
- Google Cloud Pubsub Async Streaming API in C++
- -fno-unwind-tables 和 -fno-async-unwind-tables 不起作用 NDK clang
- std::async 如何工作:为什么它会调用这么多次复制/移动?
- std::async 不会立即调用
- async中没有匹配的函数(模板中未解析的类型)
- std::async 如果线程是从 DLL 创建的,则会阻止进程退出?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- C++ | TCP - receive
- 可能的 std::async 实现错误 Windows
- 为什么使用线程池时嵌套调用 boost::async 会阻塞?
- C++从 std::async 函数读取命名空间中的全局变量标志
- std::async 究竟是如何执行的?