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

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

Реклама

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

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

Однако могут также возникать различные коды отказа, например значение ECONNREFUSED указывает, что удаленный хост отклонил зарос на установление соединения.  Если вызов функции connect () сразу же был выполнен успешно, то можно переходить к использованию этого сокета без лишних хлопот. В ином случае проверяется код результата. Если он отличен от EINPROGRESS, то попытка соединения оказалась неудачной и поэтому вызывается функция die.

В ином случае, если код результата равен EINPROGRESS, то попытки установить соединение продолжаются. Теперь придется ждать, пока соединение не будет установлено. Как было указано ранее, функция select () показывает, что сокет отмечен как доступный для записи сразу после завершения неблокирующей операции подключения. Этим свойством новой функции можно воспользоваться путем создания нового объекта IO::Select, добавления к нему сокета и вызова его метода can_write () с тайм-аутом. Если подключение сокета было выполнено до истечения тайм-аута, то метод can_write() возвращает одноэлементный список, содержащий сокет. В ином случае он возвращает пустой список и вызывается функция die с сообщением об ошибке.

my $s = IO::Select->new($sock);
die "timeout!" unless $s->can_write($TIMEOUT);

Если метод can_write () возвращает сокет, это значит, что подключение было выполнено, но неизвестно, действительно ли это соединение было установлено ус­пешно. При неблокирующем подключении может быть возвращена такая ошибка, проявляющаяся не сразу, как ECONNREFUSED. Можно определить, было ли это подключение выполнено успешно, путем вызова метода connected () объекта сокета, который возвращает истинное значение, если сокет в настоящее время подключен и ложное — в ином случае.

unless ($sock->connected) {
$! == $sock->sockopt (SO_ERR0R) ;
die "Can’t connect: $!"
}


2014-09-28 13:02:11

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


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


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


РЕКОМЕНДУЕМ

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