Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

IO::Socket::IP

1 view
Skip to first unread message

Stas Mishchenkov

unread,
Feb 8, 2022, 1:01:03 PM2/8/22
to
Hi, All!

Имеем такой код:

my $sock = IO::Socket::IP->new(PeerAddr => $host,
PeerPort => $portaddress,
Timeout => 15,
Proto => 'tcp') || print "error $!\n" &&
return " $host - Error $!\n";

с некоторыми хостами, например, joesbbs.com:24554, может провисеть при попытке
соединения несколько часов. По таймауту не отваливается. Что я не так делаю или
как заставить его всё-таки выдавать ошибку по таймауту?

Have nice nights.
Stas Mishchenkov.

Eugene Grosbein

unread,
Feb 9, 2022, 3:01:03 AM2/9/22
to
08 февр. 2022, вторник, в 20:03 NOVT, 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> соединения несколько часов. По таймауту не отваливается. Что я не так
SM> делаю или
SM> как заставить его всё-таки выдавать ошибку по таймауту?

Для начала перестань предполагать, что print всегда успешен
и больше не пиши print "error $!\n" && return

print тоже может обломаться и вернуть ложь
(вывод перенаправлен в файл и место кончилось, или вывод уходит
в сетевой сокет и локальный файрвол зарезал соединение и т.д.)

А по сути - работа таймаутов системно-зависима, что у тебя за версия
Perl и операционной системы?

Eugene
--
What would you do with a brain if you had one?

Stas Mishchenkov

unread,
Feb 9, 2022, 3:01:03 AM2/9/22
to
Hi, Eugene!

09 фев 22 13:46, Eugene Grosbein -> 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 всегда успешен

Ну, в данном случае точно не в нем дело.

EG> и больше не пиши print "error $!\n" && return

А как писать?

EG> print тоже может обломаться и вернуть ложь
EG> (вывод перенаправлен в файл и место кончилось, или вывод уходит
EG> в сетевой сокет и локальный файрвол зарезал соединение и т.д.)

EG> А по сути - работа таймаутов системно-зависима, что у тебя за версия
EG> Perl и операционной системы?

[fido@brorabbit ip]$ perl -v

This is perl 5, version 28, subversion 3 (v5.28.3) built for
x86_64-linux-thread-multi

[fido@brorabbit ip]$ uname -a
Linux brorabbit 5.4.81-std-def-alt1 #1 SMP Fri Dec 4 09:57:57 UTC 2020 x86_64
GNU/Linux

Eugene Grosbein

unread,
Feb 9, 2022, 6:01:02 AM2/9/22
to
09 февр. 2022, среда, в 10:38 NOVT, 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>>> не
SM>>> так делаю или как заставить его всё-таки выдавать ошибку по таймауту?
EG>> Для начала перестань предполагать, что print всегда успешен
SM> Hу, в данном случае точно не в нем дело.
EG>> и больше не пиши print "error $!\n" && return
SM> А как писать?

|| { print ... ; return ...; }

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
SM> x86_64
SM> GNU/Linux

Проблема воспроизводима? Hадо смотреть truss или что там у тебя есть
из трассировки системных вызовов.

Eugene
--
Поэты - страшные люди. У них все святое.

Stas Mishchenkov

unread,
Feb 10, 2022, 1:01:03 PM2/10/22
to
Hi, Eugene!

09 фев 22 17:01, Eugene Grosbein -> Stas Mishchenkov:

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
SM>> x86_64 GNU/Linux

EG> Проблема воспроизводима?

Через раз.

EG> Hадо смотреть truss или что там у тебя есть из трассировки системных
EG> вызовов.

Пока вроде бы победил дополнительным вызовом sock->timeout(15);
0 new messages