@headcrack Now I found something. It seems that HTTP_Request2_SocketWrapper uses 'fgets' instead of 'fread':
https://secure.php.net/fgets vs. https://secure.php.net/fread
Unline fgets, fread has this in the criteria to stop reading data: "a packet becomes available or the socket timeout occurs (for network streams)"
It seems as though 'fgets' is unaffected by timeouts and also unclear exactly whether 'fread' considers the full timeout or just "per-character" (which I don't think is the case, but is the situation you're describing).
I'll see if switching to fread helps, assuming hash.my is still alive and dysfunctional.