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

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

Реклама

Perl для IP-Телефонии (22 – IO::Socket, часть 28)

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

Второй случай, в котором пользователь закрывает устройство STDIN, немного слож­нее. Было бы легче, если бы родительский процесс мог просто уничтожить свой дочер­ний процесс с помощью функции kill() после закрытия стандартного устройства вво­да. Однако при этом возникает проблема. То, что пользователь закрыл стандартное уст­ройство ввода, не означает, что сервер закончил передачу данных пользователю. Если дочерний процесс уничтожается до того, как будет получена от сервера и обработана вся оставшаяся информация, некоторая часть данных может быть потеряна. Это не приемлемо при разработке приложений, например для iphone5  http://applefavorite.ru/iphone5/ .

Более корректный способ действий в этом случае следующий. Когда роди­тельский процесс получает сообщение о возникновении условия EOF со стандартного устройства ввода, он закрывает свой конец сокета, что приводит к отправке на сервер сообщения о возникновении условия конца файла. Сервер обнаруживает условие EOF, закрывает свой конец соединения и тем самым снова распространяет действие усло­вия EOF на дочерний процесс. Дочерний процесс завершается, вырабатывая сигнал CHLD. Родительский процесс перехватывает этот сигнал и сам завершает работу.

Это — красивое решение, поскольку в нем дочерний процесс не обнаруживает ус­ловия EOF до тех пор, пока не закончит обработку всех данных сервера, находящихся в очереди. Это гарантирует отсутствие потерь данных. Кроме того, данная схема действует столь же успешно, если инициатором разрыва соединения является сервер. При использовании такой схемы есть вероятность риска, которая связана с тем, что сервер может не выполнить требуемых действий и просто закрыть свой конец соединения при получении условия EOF. Однако большинство серверов в такой ситуаций ведет себя правильно. Если пользователь обнаружит, что сервер не выполняет требуемых действий, он всегда может уничтожить и родительский, и дочерний процессы, нажав клавишу прерывания.



2013-11-20 10:18:07

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


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


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


РЕКОМЕНДУЕМ

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