Вопрос по сокетам

Сергей Тарасов

Профессор
Вопрос по сокетам

Всем добрый день!

Сложилась следующая проблема.

Последовательно вызываются функции
PHP:
if (socket_write($sock, $request_body, strlen($request_body)) === FALSE )
{
...
}
$response_buff = "";

do
{
		if ((($buf = socket_read($sock, 4096,  PHP_BINARY_READ)) === FALSE)) 
		{				
			break;         
       		}       		
      		$response_buff .= $buf;
}
while (true);
В итоге response_buff - пустая строка.
Никаких сообщений об ошибках не выдается.

При пошаговом выполнении программы в дебагере или при вставке строки sleep(2) между socket_write и socket_read - все нормально. Такое впечатление, что функция socket_read почему-то не блокируется и при выполнении программы без задержки буфер сокета пуст, а ожидания данных не происходит.

Для сокета установленв следующие параметры:

PHP:
socket_set_option($sock, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 0, "usec" => 1000));
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 0, "usec" => 1000)); 
socket_set_block($sock);
PHP 5.1/CGI Gentoo Linux

Может кто сталкивался с подобной проблемой?

-~{}~ 13.04.06 12:28:

У кого есть какие мысли?

-~{}~ 13.04.06 14:44:

Млин... Неужто никто не работал с сокетами???
 

Kosarev

Новичок
а ты можешь проконтролировать отдаёться ли тебе результат ?
 

Сергей Тарасов

Профессор
Я же говорю:
1) При пошаговом выполнении или при задержке в 1-2 между записью в сокет и чтением - все нормально, все данные приходят.
2) При непрерывном выполнении программы - пустая строка.

Функция socket_read почему-то не блокируется в ожидании данных.
 
Сверху