Проблема с мультикурлом при работе через socks5

xarp

Новичок
Проблема с мультикурлом при работе через socks5

Добрый день.

Ваш форум почитываю уже давно, но зарегистрироваться решился только сегодня, после того, как 2 дня промучился над одним вопросом и нигде - ни в архиве форума, ни во всем интернете не нашел решения моей проблемы.

Сейчас пишу чекер socks5-проксей и для этого использую мультикурл. При использовании easy curl проблем не возникает. Разве что зависание скрипта, и отказ таймаутов, если прокси-сервер не отвечает, но как я понял - это известный баг и его обещали исправить в следующем релизе curl'а. Если же я начинаю использовать многопоточные функции, то скрипт выдает по каждому потоку следующее: "Curl error on handle 1: Send failure: Socket is not connected"

Код скрипта:

PHP:
$mh = curl_multi_init();

$base = file("proxies.txt");

foreach ($base as $i => $url) {
	$conn[$i] = curl_init("http://moy_domen.com"); 
	curl_setopt ($conn[$i], CURLOPT_TIMEOUT, 30);
	curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT, 20);
	curl_setopt ($conn[$i], CURLOPT_PROXY, trim($url)); 
	curl_setopt ($conn[$i], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); 
	curl_setopt ($conn[$i], CURLOPT_RETURNTRANSFER, TRUE); 
	curl_multi_add_handle ($mh,$conn[$i]);
}

do {
	$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);



while ($active and $mrc == CURLM_OK) {
	if (curl_multi_select($mh) != -1) {
		sleep(1);
	do {
		$mrc = curl_multi_exec($mh, $active);
	} while ($mrc == CURLM_CALL_MULTI_PERFORM);
	}
}

if ($mrc != CURLM_OK) {
	print "Curl multi read error $mrc\n";
}

foreach ($base as $i => $url) {
	if (($err = curl_error($conn[$i])) == '') {
	$res[$i]=curl_multi_getcontent($conn[$i]);
	} else {
		print "Curl error on handle $i: $err<br>";
	}
	curl_multi_remove_handle($mh,$conn[$i]);
	curl_close($conn[$i]);
}
curl_multi_close($mh);
Система: ОС FreeBSD, PHP Version 5.1.6, libcurl 7.15.5

Стоит убрать 2 строки:
curl_setopt ($conn[$i], CURLOPT_PROXY, trim($url));
curl_setopt ($conn[$i], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
и все работает. Если закомментировать только вторую строку и в proxies.txt положить http-прокси, тоже работает. Сами прокси рабочие. Уверен, так как проверил на однопоточном скрипте. Может кто сталкивался, в чем может быть проблема?

Заранее спасибо за помощь!
 
Сверху