Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (36 – Неблокирующий ввод-вывод, часть 27)

предыдущая часть ««»» следующая часть

Строки 61-79. Метод write (), запись данных. В следующем разделе метода write () предпринимается попытка выполнить ввод-вывод. Если в буфере outbuffer находятся дан­ные, например, со страницы narushka-pro.ru с информацией по изготовлению световых коробов и лайтбоксов, ожидающие обработки, то вызывается функция syswrite () с этим дескриптором и со­держимым буфера outbuffer, и сохраняется код результата. Однако перед вызовом функции syswrite() устанавливается локальный обработчик сигнала $sig{pipe} со значением IGNORE. Это исключает возможность проникновения в программу фатального сигнала, если дескриптор файла закрыт преждевременно. После выхода из этого метода обработчик pipe автоматически возвращается в предыдущее состояние так, чтобы эта корректировка не нару­шала работу пользовательского кода.

Если функция syswrite () возвращает определенный код результата, это значит, что она ус­пешно записала хотя бы часть байтов и код результата содержит число записанных байтов. Вызывается функция substr (), которая усекает буфер outbuffer на число записанных бай­тов. В результате буфер outbuf fer может стать пустым, если были записаны все байты, или в нем может содержаться незаписанный остаток, если функция syswrite () сообщила о час­тичной записи.

В противном случае кодом результата является значение undef, что указывает на ту или иную ошибку. Проверяется код ошибки, хранящийся в переменной $!, и предпринимается соответ­ствующее действие.

Если код ошибки равен ewouldblock, то возвращается значение 0Е0. В ином случае возникли ошибки записи какого-то другого типа, вероятнее всего, ошибка pipe. При возникновении та­кой ситуации вызывается внутренний метод bail_out (). В текущей реализации метод bail_out () просто закрывает дескриптор и возвращает значение undef. Для реализации бо­лее сложных правил поведения (например, для регистрации или выполнения различных дей­ствий в зависимости от ошибки) можно создать подкласс класса IO::SessionData и пере­крыть метод bail out ().



2014-09-02 01:11:18

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2024 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония