[pve-devel] [PATCH cluster 2/2] pvecm mtunnel: factor out run command

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Aug 3 17:11:18 CEST 2017


Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
 data/PVE/CLI/pvecm.pm | 45 +--------------------------------------------
 1 file changed, 1 insertion(+), 44 deletions(-)

diff --git a/data/PVE/CLI/pvecm.pm b/data/PVE/CLI/pvecm.pm
index 799665a..7ca98f7 100755
--- a/data/PVE/CLI/pvecm.pm
+++ b/data/PVE/CLI/pvecm.pm
@@ -864,50 +864,7 @@ __PACKAGE__->register_method ({
 	    }
 	    my $port = PVE::Tools::next_migrate_port($family, $ip);
 
-	    # Wait for a client
-	    my $socket = IO::Socket::IP->new(
-		Listen => 1,
-		ReuseAddr => 1,
-		Family => $family,
-		Proto => &Socket::IPPROTO_TCP,
-		GetAddrInfoFlags => 0,
-		LocalAddr => $ip,
-		LocalPort => $port,
-	    ) or die "failed to open socket: $!\n";
-	    print "$ip\n$port\n";
-	    *STDOUT->flush();
-	    alarm 0;
-	    local $SIG{ALRM} = sub { die "timed out waiting for client\n" };
-	    alarm 30;
-	    my $client = $socket->accept;
-	    alarm 0;
-	    close($socket);
-
-	    # We want that the command talks over the TCP socket and takes
-	    # ownership of it, so that when it closes it the connection is
-	    # terminated, so we need to be able to close the socket. So we
-	    # can't really use PVE::Tools::run_command().
-	    my $pid = fork();
-	    die "fork failed: $!\n" if !defined($pid);
-	    if (!$pid) {
-		POSIX::dup2(fileno($client), 0);
-		POSIX::dup2(fileno($client), 1);
-		close($client);
-		exec {$cmd->[0]} @$cmd or do {
-		    warn "exec failed: $!\n";
-		    POSIX::_exit(1);
-		};
-	    }
-	    close($client);
-	    if (waitpid($pid, 0) != $pid) {
-		kill(9 => $pid);
-		1 while waitpid($pid, 0) != $pid;
-	    }
-	    if (my $sig = ($? & 127)) {
-		die "got signal $sig\n";
-	    } elsif (my $exitcode = ($? >> 8)) {
-		die "exit code $exitcode\n";
-	    }
+	    PVE::Tools::pipe_socket_to_command($cmd, $ip, $port);
 	    return undef;
 	}
 
-- 
2.11.0





More information about the pve-devel mailing list