2016-08-24 55 views
2

在我的测试中我的客户端得到偶尔,试图从升压套接字读取时,错误

一个现有的连接“的现有连接被强行关闭远程主机” Boost.Asio的错误代码通过远程主机

强行关闭我有几个问题:

1)什么是加速错误代码,我要检查这与此消息相关联?

2)什么是Linux系统上的模拟?我可以捕获相同的错误代码吗?

3)在服务器的日志中,我看不到成功的连接。但客户端从连接尝试中成功返回。另外boost::asio::write()成功,但这里的服务器也没有收到任何东西。但是当试图从套接字读取(在​​发送之后)时,我得到上面的错误消息。

这是怎么回事?

+0

你可以用客户端写你的套接字,服务器似乎一个人留下,你告诉你的路由器重定向xxx端口的流量到你的服务器? – user

+0

这是一个零星的错误,通常不会发生。此外,还有很多测试运行启动服务器并进行一些通信,有时由于此错误而导致其中一些失败。它看起来像服务器由于某种原因无法启动 - 但我想知道,为什么建立连接不会失败,但只有读取。 – alex

+0

Wireshark可能对您的案例有用。由于各种原因,读取错误可能会发生,例如RST数据包,其中的IMO是您的情况:“现有连接被远程主机强制关闭”。 – user

回答

2

在回答你的问题:

1)boost错误代码是boost::asio::error::connection_reset;见boost/system/error_code.hpp

2)linux上的模拟系统是ECONNRESET;见errno.h。请参考:How to detect when a boost TCP socket disconnects

要准确确定发生了什么,我同意@user,并建议您安装并使用Wireshark来观察客户端和服务器之间的TCP消息。

+0

使用wireshark的问题是,断开连接只发生很少,我不得不以某种方式筛选出所有成功的连接来分析错误情况。 – alex

+0

Wireshark具有过滤器,可让您找到要分析的错误案例。 – kenba