From: Michael Gernoth Date: Tue, 16 Jul 2013 16:18:49 +0000 (+0200) Subject: select X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/upsgraph/commitdiff_plain/3679b92785fa7106d07999fcc95750457693e077?ds=sidebyside select --- diff --git a/upsgraph.pl b/upsgraph.pl index 10f622b..010d114 100755 --- a/upsgraph.pl +++ b/upsgraph.pl @@ -11,6 +11,7 @@ if ((@ARGV != 1) && (@ARGV != 2)) { use Net::SNMP; use IO::Socket::INET; +use IO::Select; use RRDs; use File::Copy; use Data::Dumper; @@ -124,7 +125,13 @@ sub fetch_tcp(@) { return undef if (!$sock); - chomp(my $value = <$sock>); + my $select = IO::Select->new($sock); + + my $value = undef; + + if ($select->can_read(1)) { + chomp($value) if (sysread($sock, $value, 4096) > 0); + } close($sock); @@ -150,11 +157,19 @@ sub fetch_tcp_multi(@) { return undef if (!$sock); - while(<$sock>) { - chomp; - (my $key, my $value) = split(/${delimiter}/, $_); - $value=~ s/\s//g; - $values{$key} = $value; + my $select = IO::Select->new($sock); + + while($select->can_read(1)) { + if (sysread($sock, my $buf, 16384) > 0) { + $buf=~s/\r//g; + foreach my $line (split(/\n/, $buf)) { + (my $key, my $value) = split(/${delimiter}/, $line); + $value=~ s/\s//g; + $values{$key} = $value; + } + } else { + last; + } } close($sock);