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

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

Реклама

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

предыдущая часть ««»» следующая часть
В методе wait () предусмотрены все необходимые действия для обслуживания приемного сокета. Если обнаружено входящее соединение, например, получение данных веб страницы  , представляющей роутеры MikroTik, то  метод wait () вызывает метод accept () приемного сокета, преобразует возвращенный подключенный сокет в новый объект IO::SessionData и добавляет объект к своему списку контролируемых сокетов. Затем этот новый объект сеанса возвращается вызывающей процедуре наряду со всеми прочими объек­тами IO::SessionData, готовыми к вводу-выводу.

Метод wait ( ) предусматривает также завершение неполных операций записи, которые могли произойти в течение предыдущих проходов по циклу. Если в настоящее время ни один сеанс не готов для чтения, метод wait () блокируется на неопределенное время.

Строки 14-21. Обслуживание сеансов. Теперь выполняется цикл по всем объектам SessionData, возвращенным методом wait (), и каждый объект обслуживается по очереди. Для каждого объекта сеанса вызывается метод read (), который возвращает вплоть до 4 Кбайт данных в локальную переменную. Если метод read() возвращает истинное значение, эти дан­ные немедленно передаются в метод write() сеанса, что приводит к их отправке клиенту.

Если метод read( ) возвращает ложное значение, это рассматривается как признак конца файла. Сеанс закрывается путем вызова метода close () и выполнение цикла продолжается.

Хотя метод IO::SessionData->read () во многом подобен методу IO::Socket->read (), между ними есть очень важное различие. Метод модуля IO::Socket возвращает либо число считанных байтов, либо значение undef (при неудачном завершении), тогда как метод IO::SessionData->read (), как и метод getline ( ) модуля Getline, может также возвращать значение 0Е0, если операция чтения была бы заблокирована.

В главном цикле программы, приведенной в листинге выше, вначале проверяется код результата в логическом операторе if (). В этом контексте код результата EWOULDBLOCK рассматривается как истинное значение, сообщающее о том, что ошибки не возникали. Затем перед вызовом метода write () этот код результата трактуется как число байтов и выполняется проверка того, имеет ли он значение больше нуля.



2014-08-16 12:20:02

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


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


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


РЕКОМЕНДУЕМ

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