момент закрытия сокета

DiMA

php.spb.ru
Команда форума
момент закрытия сокета

Соединяюсь с неким хост:портом (к примеру Апач) из пхп через сокет... Надо выяснить, через сколько секунд соединение будет закрыто. Ничего писать туда нельзя, ответа (раз это Апач, к примеру) от сервера тоже ждать нечего. Как узнать, что на N-ном шаге цикла ожидания сокет был наконец-то закрыт.

<?
$f = fsockopen ("1.2.3.4", 1234, &$errno, &$errstr, 30);

if (!$f) die("$errstr ($errno)");

for ($i=0; $i<1000; $i++) {
echo "* \n"; flush();
usleep(100);
// тут нужно проверить, не закрыто ли соединение, чтобы выйти из цикла
// и записать время работы
}

fclose($f);
?>

пробовал проверять как if (feof($f)) или if (!f), но не угадал.
 

antonio

Moderator
Команда форума
А socket_get_status пробовал смотреть? Может поможет?
 

DiMA

php.spb.ru
Команда форума
спасибо, нашел такую функцию
http://www.php.net/manual/en/function.socket-get-status.php

только она не работает. Наверно не для fsockopen, а для сокета, который listen port... ;-(

прога пишет что (раз в секунду):
0) timed_out=false blocked=true eof=false unread_bytes=false
1) timed_out=false blocked=true eof=false unread_bytes=false
2) timed_out=false blocked=true eof=false unread_bytes=false
3) timed_out=false blocked=true eof=false unread_bytes=false
4) timed_out=false blocked=true eof=false unread_bytes=false
5) timed_out=false blocked=true eof=false unread_bytes=false
6) timed_out=false blocked=true eof=false unread_bytes=false

закрытие программы с листен-портом (которая успешно ловит текст от пхп-программы) никак не меняет данные переменные.
 
Сверху