当我收到连接超时时,我的软件中出现了一个错误.这些错误非常罕见(通常是我的内部网络丢失了我的连接).如何人工生成这种效果,以便测试我们的软件?
如果重要,应用程序是使用CAsyncSocket类在C++/MFC中编写的.
编辑:
我尝试使用不存在的主机,我收到套接字错误:
WSAEINVAL(10022)参数无效
我的下一次尝试是使用亚历山大建议连接到另一个端口,例如81(虽然在我自己的服务器上).这很有效.与断开的连接完全相同(60秒等待,然后错误).谢谢!
连接到不可路由的IP地址,例如10.255.255.1.
连接到现有主机,但连接到防火墙阻止的端口,该端口只丢弃TCP SYN数据包.例如,www.google.com:81.
如果您使用的是unix机器,则可以使用netcat启动端口监听:
nc -l 8099
然后,修改您的服务以调用它通常对该端口执行的任何操作,例如http:// localhost:8099/some/sort/of/endpoint
然后,您的服务将打开连接并写入数据,但永远不会得到响应,因此会给您一个读取超时(而不是拒绝连接)
以下URL总是给出超时,并结合@Alexander和@ Emu的最佳答案:
http://example.com:81
使用example.com:81
是对Alexander的答案的改进,因为example.com是由DNS标准保留的,所以它总是无法访问,不像google.com:81
,如果谷歌感觉它可能会改变.此外,由于example.com
定义为无法访问,因此您不会充斥Google的服务器.
我会说它比@ emu的答案有所改进,因为它更容易记住.
您可以使用Python REPL在接收数据时模拟超时(即在成功建立连接之后).只需要标准的Python安装.
Python 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import socket >>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> s.bind(('localhost', 9000)) >>> s.listen(0) >>> (clientsocket, address) = s.accept()
现在它等待传入连接.连接您想要测试的任何内容localhost:9000
.当你这样做时,Python将接受连接并accept()
返回它.除非你通过它发送任何数据clientsocket
,否则调用者的套接字应该在下一个时间超时recv()
.
10.0.0.0,10.255.255.255,172.16.0.0,172.31.255.255,192.168.0.0,192.168.255.255
所有这些都是不可路由的.
我想指出每个人都注意道路
使用配置(取自他们的示例),200:b@100:dr
您将获得随机丢弃的连接.
软件解决方案怎么样:
在应用程序服务器上安装SSH服务器.然后,使用套接字隧道在本地端口和应用程序服务器上的远程端口之间创建链接.您可以使用ssh客户端工具来执行此操作.让您的客户端应用程序连接到映射的本地端口.然后,您可以随意中断套接字隧道以模拟连接超时.
很多好的答案,但最干净的解决方案似乎是这项服务
http://httpstat.us/504?sleep=60000
您可以配置超时时间(最多230秒)和最终的返回码。