我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?

如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。

编辑:

我尝试使用一个不存在的主机,我得到套接字错误:

无效的参数

我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!


当前回答

您可以尝试在外部端口(例如200)上连接到一个知名的Web站点。大多数防火墙都在DROP模式下工作,它会为你模拟超时。

其他回答

把你的网线插到没有其他连接/电缆的交换机上。恕我直言,这应该有用。

连接到一个现有的主机,但是连接到一个被防火墙阻塞的端口,防火墙只是丢弃TCP SYN包。例如:www.google.com:81。

对我来说,最简单的方法是根据目的网络在办公路由器上添加静态路由。只是将流量路由到一些没有响应的主机(例如您的计算机),您将得到请求超时。

对我来说最好的事情是静态路由可以通过web界面管理,并且很容易启用/禁用。

最简单的方法是使用CurrPorts删除连接。

然而,为了单元测试你的异常处理代码,也许你应该考虑抽象你的网络连接代码,并编写一个存根、mock或decorator来按需抛出异常。然后,您将能够测试应用程序错误处理逻辑,而不必实际使用网络。

如果你在unix机器上,你可以使用netcat启动一个端口监听:

nc -l 8099

然后,修改您的服务调用它通常对该端口做的任何事情,例如http://localhost:8099/some/sort/of/endpoint

然后,您的服务将打开连接并写入数据,但永远不会得到响应,因此将给您一个“读取超时”(而不是“拒绝连接”)。