[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна помощь с сокетами и stream'ами
sash
Всем доброго времени суток.
Есть у меня задача - принимать 2 потока от кодировщиков и, в зависимоти от условий, передавать один из них icecast'у (сервер интернет-радио).
Один поток от удаленного кодировщика (вроде ретрансляции), если он пропал - переключаться на другой поток (резервный, от локального кодировщика). А на выходе icecast не должен замечать подмены.

Сейчас для всего этого используется 4 скрипта: первый создает кусок памяти shmop_open() для буфера, и запускает 2 скрипта как отдельные процессы (для приема потоков от кодировщиков и записи их в буфер) и еще один отдельный для чтения из буфера и выдачи серваку.

Это все работает нормально, переключаться - переключается, но при кратковременном обрыве связи от одного из кодировщиков, кодировщик (клиент) пытается переподключиться, а сокет более не реагирует, т.к. он уже открыт.

Код
$server = stream_socket_server('tcp://91.196.228.82:8000');
$socket = stream_socket_accept($server);
fwrite($socket, $greeting); //send headers

while(true){

  usleep(10000);

buf_r(); //read from $sock into shared buf.

    $status = stream_get_meta_data($socket);
    if($status['eof']){
    //reaccept
        fclose($socket);
        $socket = stream_socket_accept($server);
        fwrite($socket, $greeting);
    }

}
/* Close it up */
fclose($socket);
fclose($server);

и вот эта часть не работает
Код
    $status = stream_get_meta_data($socket);
    if($status['eof']){
    //reaccept
        fclose($socket);
        $socket = stream_socket_accept($server);
        fwrite($socket, $greeting);
    }


Посоветуйте, как его заставить работать?



Спустя 9 дней, 19 часов, 15 минут, 41 секунда (24.10.2008 - 13:05) bearman написал(а):
а соединения вещь такая, пока не попытаешься прочитать из него, он не поймет ЕОФ или нет, другими словами get_eta_data бесполезно вызывать если перед этим не делать нечто вида socket_read smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.