If you are making Synchronous calls in WinInet, the DNS timeouts don’t appear to work when set (see: http://support.microsoft.com/kb/263558 ).
Async calls do however work correctly.
One workaround is to simply restart the application using WinInet.
I found a code workaround for the issue as well. Simply open and close the handle you get with the InternetOpen call then open it again:
// now use handle…
The performance impact will be very low.