[pve-devel] [PATCH v3 pve-common 2/2] Added PVE::Network::tcp_ping to replace Net::Ping

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Aug 26 10:42:54 CEST 2015


Naturally, after copying from my temporary test.pl file I had to forget to
include the
+use POSIX qw(ECONNREFUSED);
sorry about that... -_-

> On August 26, 2015 at 10:38 AM Wolfgang Bumiller <w.bumiller at proxmox.com>
> wrote:
> 
> 
> We use Net::Ping twice in pve-storage (once for ISCSIPlugin
> and once in GlusterfsPlugin, both with the 'tcp' variant.),
> but Net::Ping doesn't support IPv6.
> ---
>  src/PVE/Network.pm | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm
> index ff4a89c..5cd47b4 100644
> --- a/src/PVE/Network.pm
> +++ b/src/PVE/Network.pm
> @@ -6,6 +6,7 @@ use PVE::Tools qw(run_command);
>  use PVE::ProcFSTools;
>  use PVE::INotify;
>  use File::Basename;
> +use IO::Socket::IP;

<<< here:
+use POSIX qw(ECONNREFUSED);

>  
>  # host network related utility functions
>  
> @@ -437,4 +438,32 @@ sub activate_bridge_vlan {
>      return $bridgevlan;
>  }
>  
> +sub tcp_ping {
> +    my ($host, $port, $timeout) = @_;
> +
> +    my $refused = 1;
> +
> +    $timeout = 3 if !$timeout; # sane default
> +    if (!$port) {
> +	# Net::Ping defaults to the echo port
> +	$port = 7;
> +    } else {
> +	# Net::Ping's port_number() implies service_check(1)
> +	$refused = 0;
> +    }
> +
> +    my ($sock, $result);
> +    eval {
> +	$result = PVE::Tools::run_with_timeout($timeout, sub {
> +	    $sock = IO::Socket::IP->new(PeerHost => $host, PeerPort => $port, Type
> => SOCK_STREAM);
> +	    $result = $refused if $! == ECONNREFUSED;
> +	});
> +    };
> +    if ($sock) {
> +	$sock->close();
> +	$result = 1;
> +    }
> +    return $result;
> +}
> +
>  1;
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>




More information about the pve-devel mailing list