Если метод connected () возвратил ложное значение, то, вероятно, следует определить, по каким причинам попытка подключения завершилась неудачей. Однако нельзя просто проверить содержимое переменной $! , поскольку она может содержать сообщение об ошибке, связанное с последним по времени системным вызовом, а не сообщение об ошибке, активизация которой отложена. Для получения необходимой информации вызывается метод sосkopt () сокета с параметром SO_ERROR, который позволяет определить ошибку сокета с отложенной активизацией. Этот метод возвращает стандартный числовой код ошибки, который присваивается переменной $!. Теперь, после вызова функции die с сообщением об ошибке магическое поведение переменной гарантирует, что этот код ошибки будет отображен в виде сообщения, предназначенного для восприятия человеком, при его использовании в строковом контексте.
В результате успешного выполнения этого блока кода создается подключенный сокет, через который в последствии можно получить, например, информацию о ценах на видеорегистраторы Intego или другой контекст. Он снова переводится в блокирующий режим, и дальнейшие действия с ним выполняются как обычно.
$sock->blocking(1);
Выполнить операцию ввода-вывода в сокете и т.д. В листинге этот фрагмент кода показан полностью в форме подпрограмм connect_with_timeout (). Вызов этой подпрограммы может быть выполнен примерно так:
my $socket = connect_with_timeout($host,$port, $timeout);
При изучении исходного кода модуля IO::Socket можно обнаружить, что для реализации опции Timeout применяется во многом аналогичный способ.