Artificially create a connection timeout error
I've had a bug in our software that occurs when I receive a connection timeout. These errors are very rare (usually when my connection gets dropped by our internal network). How can I generate this kind of effect artificially so I can test our software?
If it matters the app is written in C++/MFC using CAsyncSocket classes.
Edit:
I've tried using a non-existent host, and I get the socket error:
WSAEINVAL (10022) Invalid argument
My next attempt was to use Alexander's suggestion of connecting to a different port, e.g. 81 (on my own server though). That worked great. Exactly the same as a dropped connection (60 second wait, then error). Thank you!
Solution 1:
Connect to a non-routable IP address, such as 10.255.255.1.
Solution 2:
Connect to an existing host but to a port that is blocked by the firewall that simply drops TCP SYN packets. For example, www.google.com:81.
Solution 3:
If you are on a unix machine, you can start a port listening using netcat:
nc -l 8099
Then, modify you service to call whatever it usually does to that port e.g. http://localhost:8099/some/sort/of/endpoint
Then, your service will open the connection and write data, but will never get a response, and so will give you a Read Time Out (rather than Connection Refused)
Solution 4:
Plenty of good answers but the cleanest solution seems to be this service
http://httpstat.us/504?sleep=60000
You can configure the timeout duration (up to 230 seconds) and eventual return code.
Solution 5:
The following URL always gives a timeout, and combines the best of @Alexander and @Emu's answers above:
http://example.com:81
Using example.com:81
is an improvement on Alexander's answer because example.com is reserved by the DNS standard, so it will always be unreachable, unlike google.com:81
, which may change if Google feels like it. Also, because example.com
is defined to be unreachable, you won't be flooding Google's servers.
I'd say it's an improvement over @emu's answer because it's a lot easier to remember.