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

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

Реклама

Perl для IP-Телефонии (32 – TCP клиент/сервер, часть 12)

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

Проведем анализ программы.

Строки 1-5. Загрузка модулей. Работа начинается с загрузки модулей Chatbot::Eliza и IO:: Socket и импорта константы wnohang из модуля posix. Определяется также порт, из которого должен принимать запросы сервер, например содержащий информацию по скриптам http://alaev.info/blog/post/2681 . В данном случае порт с номером 12000.

Строки 6, 7. Определение констант и переменных. Определяется применяемый по умолча­нию порт, к которому должна быть выполнена привязка, и инициализируется глобальная пере­менная $quit, которая принимает ложное значение. Как только эта переменная примет ис­тинное значение, произойдет выход из главного цикла сервера.

Строки 8-11. Установка обработчиков сигналов. Устанавливается обработчик сигнала chld с использованием общей схемы применения функции waitpid.(), которая была описана ранее.

$SIG{CHLD} = sub { while ( waitpid(-1, WNOHANG) >0 ) };

Желательно также обеспечить корректное завершение работы сервера после ввода кода пре­рывания в командной строке, поэтому создается обработчик сигнала int. Этот обработчик просто устанавливает истинное значение переменной $quit и выполняет возврат.

Строки 12-19. Создание приемного сокета. Создается новый приемный сокет путем вызова метода IO::Socket::INET->new() с параметрами LocalPort и Listen. Указан также па­раметр Proto, равный “tcp” и установлено истинное значение параметра Reuse, что позво­ляет уничтожать и перезапускать сервер без ожидания освобождения порта, которое в ином случае было бы неизбежным.

Кроме этих стандартных параметров, объявлен параметр Timeout равный 1 часу. Как и в ин­вертирующем эхосервере, приведенном ранее, это сделано для того, чтобы иметь возможность прерывать выполнение функции accept() по сигналу. Необходимо обеспечить выполнение преждевременного возврата функции accept () при прерывании по сигналу INT, чтобы можно было проверить состояние переменной $quit.



2014-05-15 11:56:13

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


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


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


РЕКОМЕНДУЕМ

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