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

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

Реклама

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

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

К сожалению, в этом сервере необходимо использовать один сложный прием из-за некоторых особенностей функции select () . Многие реализации этой функции продолжают показывать наличие в сокете срочных данных, предназначенных для чтения, даже после вызова в программе функции recv (), но при повторном вызове эта функция завершается неудачей с ошибкой EINVAL, поскольку буфер срочных данных уже был опустошен. К подобным срочным данным может относиться информация, к примеру, о ремонте Iphone 6 , взятого со страницы сайта powerbox.org.ua.  Это условие сохраняется до тех пор, пока из сокета не будет считан хо­тя бы один байт обычных данных. Если это условие не будет обработано правильно, то после получения срочных данных программа входит в непрерываемый цикл.

Для решения этой проблемы необходимо установить флажок $ok_to_read_oob и манипулировать им. Он устанавливается каждый раз после чтения обычных данных и очищается после чтения срочных данных. В начале цикла select () сокет добавля­ется к списку дескрипторов, контролируемых на предмет поступления срочных дан­ных, если только этот флажок имеет истинное значение.

С точки зрения пользователя программа urg_recv3.pl ведет себя точно так же, как urg_recv.pl. После вызова ее на одном терминале, а клиента urg_send.pl на другом появляются следующие результаты при неоднократном нажатии клавиши прерывания в клиентской программе:

% urg_recv3.pl Listening on port 2007...
got    2    bytes    of    normal    data:.    aa
got    2    bytes    of    normal    data:    ab
got    2    bytes    of    normal    data:    aс
got    2    bytes    of    normal    data:    ad
got    I    bytes    of    urgent    data:    i
got    2    bytes    of    normal    data:    ae
got    1    bytes    of    urgent    data:    !
got    2    bytes    of    normal    data:    af

Функция sockatmark() 

Срочные данные чаще всего применяются для того, чтобы можно было отменить часть потока данных TCP как недействительную, а затем отбросить.

2015-01-30 11:03:28

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


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


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


РЕКОМЕНДУЕМ

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