From 4153b41d3a22af7889edf72ae68838ccc3645e1d Mon Sep 17 00:00:00 2001 From: benrubson <6764151+benrubson@users.noreply.github.com> Date: Thu, 5 Nov 2020 20:10:28 +0100 Subject: [PATCH] Get rid of alarm() for better cross-platform compatibility --- lib/Net/NTP.pm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/Net/NTP.pm b/lib/Net/NTP.pm index 59a5352..d302b78 100644 --- a/lib/Net/NTP.pm +++ b/lib/Net/NTP.pm @@ -171,14 +171,17 @@ sub get_ntp_response { ## receive with deadline my $data; - eval { - local $SIG{ALRM} = sub { die "Net::NTP timed out getting NTP packet\n"; }; - alarm($TIMEOUT); + my $rin = ''; + vec($rin, $sock->fileno(), 1) = 1; + my $rout = $rin; + select($rout, undef, undef, $TIMEOUT); + if (vec($rout, $sock->fileno(), 1)) { $sock->recv($data, 960) - or die "recv() failed: $!\n"; - alarm(0); - }; - alarm 0; + or die "recv() failed: $!\n"; + } + else { + die "Net::NTP timed out getting NTP packet\n"; + } my $rectime = time; # T4 my $pkt = Net::NTP::Packet->decode($data, $xmttime, $rectime);