[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