|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2008-03-29 06:48 UTC] administrator at gesoft dot org
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 13 18:00:01 2025 UTC |
Description: ------------ curl_multi does not processing multiple cURL handles in parallel when SOCKS type proxies are used. This could be easily determined by checking the spent time or by using any NET software to check amount of opened connections for particular process (you will see that curl_multi opens one or max two connections at a time) Reproduce code: --------------- $mh = curl_multi_init(); foreach ($servers as $server) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://google.com'); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_PROXY, trim($server)); curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); curl_multi_add_handle($mh, $ch); } $microTime = GetMicroTime(); do { do { } while (curl_multi_exec($mh, $stillRunning) === CURLM_CALL_MULTI_PERFORM); } while ($stillRunning); $timeSpend = GetMicroTime() - $microTime; echo sprintf('%01.4f', $timeSpend); Expected result: ---------------- The maximum spent time should be ~5 sec. Actual result: -------------- While the actual value vary from 20 till 35 sec. p.s. If you will use simple HTTP type proxies the result will be as expected ~5 sec.