我遇到了来自boost :: asio的奇怪错误的问题。我正在实现一半的TFTP服务器(仅限服务器 - >客户端)。我在第一个套接字上的端口69上获得第一个RRQ数据包,然后创建另一个套接字以执行DATA,ACK交换。我在该套接字上启动async_receive(),然后对第一个数据包执行send()。然后我得到接收的处理程序回调(我假设ACK进来)并且它给出错误“因为目标机器主动拒绝它而无法建立连接”,我从另一个线程理解这里意味着ERROR_PORT_UNREACHABLE。
我真的不明白接听电话如何导致无法解决的错误,因为我没有接触任何东西,我收到了。我检查了send()的结果,那里没有错误。
我检查了套接字中的本地和远程端点(错误之前和之后),并且它们具有正确的IP地址和端口。
有什么想法吗?我已经google了,找不到其他人有这个问题。大多数结果导致我进行stackoverflow,所以我在这里问。
编辑 - 我的问题是我正在使用调试器。当我开始发送第一个数据包时,在客户端在大约一秒钟内发送了十几个请求之后,客户端超时并放弃了我的数据为时已晚。当我没有断点运行时它工作正常。感谢大家的建议。正在看Wireshark的数据包给了我线索。
答案 0 :(得分:3)
发送成功的原因是发送只是表明已将数据包提供给操作系统。特别是,操作系统然后将该数据包发送到目的地,并以一个IP数据包响应,指示主机没有收听。然后,您的操作系统会收到它,并在您的套接字上设置一个标志,导致下一次读取失败。由于您已经在执行异步接收,因此会导致接收错误。
如果可能,我强烈建议使用wireshark或类似的东西来观看UDP交换,看看你是否可以识别任何其他问题。我不熟悉TFTP协议,不能提供太多输入。