От Eugene Grosbein (2:5006/1) к Stas Mishchenkov
В ответ на Заголовок предыдущего сообщения в треде (Имя Автора)
SM>>> Имеем такой код:
SM>>> my $sock = IO::Socket::IP->new(PeerAddr => $host,
SM>>> PeerPort => $portaddress,
SM>>> Timeout => 15,
SM>>> Proto => 'tcp') || print "error $!\n" &&
SM>>> return " $host - Error $!\n";
SM>>> с некоторыми хостами, например, joesbbs.com:24554, может провисеть при
SM>>> попытке соединения несколько часов. По таймауту не отваливается. Что я не
SM>>> так делаю или как заставить его всё-таки выдавать ошибку по таймауту?
EG>> Для начала перестань предполагать, что print всегда успешен
SM> Hу, в данном случае точно не в нем дело.
EG>> и больше не пиши print "error $!\n" && return
SM> А как писать?
EG>> print тоже может обломаться и вернуть ложь
EG>> (вывод перенаправлен в файл и место кончилось, или вывод уходит
EG>> в сетевой сокет и локальный файрвол зарезал соединение и т.д.)
EG>> А по сути - работа таймаутов системно-зависима, что у тебя за версия
EG>> Perl и операционной системы?
SM> [fido@brorabbit ip]$ perl -v
SM> This is perl 5, version 28, subversion 3 (v5.28.3) built for
SM> x86_64-linux-thread-multi
SM> [fido@brorabbit ip]$ uname -a
SM> Linux brorabbit 5.4.81-std-def-alt1 #1 SMP Fri Dec 4 09:57:57 UTC 2020 x86_64
SM> GNU/Linux
--- slrn/1.0.3 (FreeBSD)
* Origin: RDTC JSC (2:5006/1@fidonet)
Ответы на это письмо: