我遇到了来自 boost::asio 的奇怪错误的问题。我正在实现 TFTP 服务器的一半(仅限服务器-> 客户端)。我在第一个套接字上的端口 69 上获得第一个 RRQ 数据包,然后创建另一个套接字来执行 DATA、ACK 交换。我在该套接字上启动 async_receive(),然后对第一个数据包执行 send()。然后我得到接收的处理程序回调(我假设 ACK 进来),它给出了错误“无法建立连接,因为目标机器主动拒绝了它”,我从另一个线程理解这里意味着 ERROR_PORT_UNREACHABLE。
我真的不明白接收呼叫如何导致 UNREACHABLE 错误,因为我没有接触任何东西,我正在接收。我检查了 send() 的结果,那里没有错误。
我检查了套接字中的本地和远程端点(在错误之前和之后),它们都有正确的 IP 地址和端口。
有任何想法吗?我用谷歌搜索,找不到其他人有这个问题。大多数结果导致我使用stackoverflow,所以我在这里问。
编辑—— 我的问题是我正在使用调试器。当我开始发送第一个数据包时,客户端在大约一秒钟内发送了十几个请求后,客户端超时并放弃了,我的数据来不及了。当我在没有断点的情况下运行时,它工作正常。感谢大家的建议。正是观察 Wireshark 中的数据包给了我线索。