Добрый день! Возникла проблема, которую не могу разрешить: Есть скрипт, который загружает веб страницы с помощью асинхронных сокетов. Но этот скрипт не умеет определять конец у некоторых html страниц, в частности от codeproject, в результате чего получается бесконечный цикл. Синтетический тест: PHP: <? set_time_limit(200); $site = "http://www.codeproject.com/KB/database/relationaladonet.aspx"; $url = parse_url($site); $socket = stream_socket_client($url["host"].":"."80", $errno, $errstr, 100, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); $contents = array(); $write = array($socket); $read = array(); while (TRUE) { $n = stream_select($read, $write, $e = null, 2); if ($n > 0) { // чтение foreach ($read as $r) { $text = fread($r, 8096); echo date("H:i:s")." Chunk len:".strlen($text)."<br />"; flush(); // если все данные получены if (strlen($text) == 0) { echo "Complete!<br />"; echo $content; die(); } } // запись foreach ($write as $w) { fwrite($w, "GET ".$url["path"]." HTTP/1.1\r\nHost: ".$url["host"]."\r\n\r\n"); } } else { // Данных нету - спим спокойно Sleep(1); echo date("H:i:s")." Zzz...<br />"; } // Пишем один раз $write = array(); $read = array($socket); } ?> Этот скрипт у меня выдает следующее: Некоторые странички нормально загружаются, а некоторые вот так... В чем может быть проблема?? :?:
Ответ навскидку, проверять некогда - codeproject шлет Connection: Keep-Alive на 300 сек. Возможно, причина в этом. Попробуйте в строке запроса указать Connection: close.