[pve-devel] applied: [PATCH manager 1/2] status/graphite: just use setsockopt to set timeouts

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Nov 7 19:10:06 CET 2019


after rethinking this it felt weird, sockets already can to this
themself, so I checked out the IO::Socket::Timeout module, and yeah,
it's just a OOP wrapper for this, hiding the "scary" struct pack.

So instead of adding that as dependency lets do it ourself.

Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
Cc: Martin Verges <martin.verges at croit.io>
---
 PVE/Status/Graphite.pm | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/PVE/Status/Graphite.pm b/PVE/Status/Graphite.pm
index fdd4ff4c..8afadb53 100644
--- a/PVE/Status/Graphite.pm
+++ b/PVE/Status/Graphite.pm
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 use IO::Socket::IP;
-use IO::Socket::Timeout;
+use Socket qw(SOL_SOCKET SO_SNDTIMEO SO_RCVTIMEO);
 
 use PVE::Status::Plugin;
 use PVE::JSONSchema;
@@ -105,9 +105,10 @@ sub write_graphite_hash {
     ) || die "couldn't create carbon socket [$host]:$port - $@\n";
 
     if ( $proto eq 'tcp' ) {
-	IO::Socket::Timeout->enable_timeouts_on($carbon_socket);
-	$carbon_socket->read_timeout($timeout);
-	$carbon_socket->write_timeout($timeout);
+	# seconds and µs
+	my $timeout_struct = pack( 'l!l!', $timeout, 0);
+	setsockopt($carbon_socket, SOL_SOCKET, SO_SNDTIMEO, $timeout_struct);
+	setsockopt($carbon_socket, SOL_SOCKET, SO_RCVTIMEO, $timeout_struct);
     }
     write_graphite($carbon_socket, $d, $ctime, $path.".$object");
 
-- 
2.20.1





More information about the pve-devel mailing list