download_file_content has a $timeout parameter. When in emulation (Snoopy) mode, this is the 'read timeout', but in Curl mode it only sets CURLOPT_CONNECTTIMEOUT, the connection timeout, and not CURLOPT_TIMEOUT, the hard timeout.
I have made a patch. Some notes about it:
1) I made the current timeout parameter control the read timeout. This makes Snoopy/curl behaviour consistent (changing curl to do what snoopy did).
2) I changed the default to 5 minutes (300) in case people are using it to download largeish files.
3) I added an extra 'connect timeout' which defaults to 20.
The reason for making the normal, first timeout parameter the read timeout one is that you probably won't need to change the connect timeout unless you want to make things really short e.g. link checker, (ii) current code probably expects the timeout parameter to work, which it won't in many cases at present.
Connect timeout doesn't do anything if using a proxy (well unless your proxy is down), this is documented. [Another reason for focusing on 'real' timeout.]
I'd suggest fixing this in 1.9x if possible.