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

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

Реклама

Perl для IP-Телефонии (41 – Срочные данные TCP, часть 6)

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

Проведем анализ программы сервера, который обрабатывает срочные данные.

Строки 1-6. Загрузка модулей. Кроме модуля IO::Socket, загружается модуль Fcntl, который содержит определение константы f_setown.

Строки 7-11. Установка обработчика urg. В соответствии с описанной выше общей схемой, устанавливается анонимная подпрограмма, которая пытается отправить один байт срочных данных в сокет с помощью функции recv(). При успешном выполнении этой функции выводится подтверждение; в ином случае появляется сообщение об ошибке. Обратите внимание, что даже если этой функции будет передан запрос на отправку 100 байт данных, ограничения протокола  допускают отправку только одного байта срочных данных. Сервер подтверждает получение данным

Строки 12-16. Создание сокета и прием входящего соединения с помощью функции accept (). Создается приемный сокет, и через него с помощью функции accept () принимается единственное входящее соединение, к примеру это может быть страница сайта предлагающая купить ризограф , после чего подключенный сокет присваивает их переменной $sock. Это—не сервер общего назначения, поэтому нет необходимости развора­чивать цикл accept ();

Строки 17, 18. Установка владельца сокета. Подключенный сокет передается функции fcntl () с командой f_setown и идентификатором текущего процесса, хранящимся в пере­менной $$, в качестве параметра. В результате устанавливается владелец сокета, чтобы бы­ла обеспечена возможность получения сигнала urg.

Строки 19-22. Чтение данных из сокета. Для чтения обычных данных из сокета вызывается функция sysread () до тех пор, пока не будет достигнут конец файла. Все считанные данные поступают на стандартное устройство вывода.

После запуска и серверной, и клиентской программы и двукратного прерывании работы клиента можно получить наглядные результаты. Обратите внимание, что срочные данные не появляются в обычном потоке дан­ные считанных с помощью функции sysread ().

Эта серверная программа может при определенных ситуациях создать условие - “состязания”. Возможно, срочные данные поступят во время вызова функции accept () или вскоре после этого, но перед тем как будет установлен владелец сокета с помощью функции fcntl (). В таком случае сервер пропустит сигнал о поступлении срочных данных. Значимость этой проблемы зависит от приложения. Если возмож­ность возникновения такой ситуации нельзя игнорировать, то можно применить од­но из двух следующих решений:

1) предусмотреть в клиентской программе небольшую задержку после установле­ния соединения, но перед отправкой срочных данных;

2) применить функцию fcntl () к приемному сокету, поскольку в этом случае ус­тановка опций владельца будет унаследована всеми подключенными сокетами, которые будут возвращены функцией accept ().



2015-01-26 11:11:46

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


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


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


РЕКОМЕНДУЕМ

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