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

Dietmar Maurer dietmar at proxmox.com
Tue Aug 25 13:03:05 CEST 2015


you should not override the global alarm timer

On 08/25/2015 11:10 AM, Wolfgang Bumiller 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 | 18 ++++++++++++++++++
>   1 file changed, 18 insertions(+)
>
> diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm
> index ff4a89c..b296225 100644
> --- a/src/PVE/Network.pm
> +++ b/src/PVE/Network.pm
> @@ -6,6 +6,8 @@ use PVE::Tools qw(run_command);
>   use PVE::ProcFSTools;
>   use PVE::INotify;
>   use File::Basename;
> +use IO::Socket::IP;
> +use Time::HiRes 'alarm';
>   
>   # host network related utility functions
>   
> @@ -437,4 +439,20 @@ sub activate_bridge_vlan {
>       return $bridgevlan;
>   }
>   
> +sub tcp_ping {
> +    my ($host, $port, $timeout) = @_;
> +    eval {
> +	local $SIG{ALRM} = sub { die "timed out\n"; };
> +	alarm($timeout || 3);
> +	my $sock = IO::Socket::IP->new(PeerHost => $host,
> +	                               PeerPort => $port,
> +	                               # Timeout=> isn't implemented
> +	                               Type => SOCK_STREAM);
> +	alarm 0;
> +	die "timed out\n" if !$sock;
> +	$sock->close();
> +    };
> +    return $@ ne "timed out\n";
> +}
> +
>   1;





More information about the pve-devel mailing list