boost::asio error for UDP async_receive

boost::asio error for UDP async_receive

本文关键字:async receive UDP for asio error boost      更新时间:2023-10-16

我遇到了一个来自boost::asio的奇怪错误。我正在实现TFTP服务器的一半(仅限服务器->客户端)。我在第一个套接字的端口69上获得第一个RRQ数据包,然后创建另一个套接字来执行DATA、ACK交换。我在那个套接字上启动一个async_receive(),然后对第一个数据包执行send()。然后,我得到了接收的处理程序回调(我假设ACK来了),它给出了错误"由于目标机器主动拒绝,无法建立连接",我从另一个线程了解到,这意味着error_PORT_UNREACHABLE。

我真的不明白一个接收电话怎么会导致一个不可访问的错误,因为我没有联系到任何东西,我正在接收。我检查了send()的结果,没有错误。

我检查了套接字中的本地和远程端点(在错误发生之前和之后),它们都有正确的IP地址和端口。

有什么想法吗?我在谷歌上搜索过,找不到其他人有这个问题。大多数结果都让我找到了stackoverflow,所以我在这里问。

编辑--我的问题是我正在使用调试器。当我抽出时间发送第一个数据包时,在客户端在大约一秒钟内发送了十几个请求后,客户端超时并放弃了,我的数据太晚了。当我在没有断点的情况下运行时,它运行得很好。感谢大家的建议。正是通过观察Wireshark中的数据包给了我线索

发送成功的原因是因为发送只是指示数据包已提供给操作系统。特别地,操作系统然后将该数据包发送到目的地,并用指示主机未在侦听的IP数据包进行响应。然后,操作系统接收到它,并在套接字上设置一个标志,导致下一次读取失败。由于您已经在执行异步接收,它会导致接收返回错误。

如果可能的话,我强烈建议使用wireshark或类似的东西来观察UDP交换,看看你是否能发现任何其他问题。我不熟悉TFTP协议,也不能在那里提供太多输入。