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:

hOpen= ::InternetOpen(.....);


hOpen= ::InternetOpen(.....);

// now use handle...

 The performance impact will be very low.