#!/usr/bin/env perl use IPC::Open2; use IO::Socket; my $pid = open2(my $out, my $in, 'bash'); $socket = IO::Socket::INET->new(PeerAddr => "127.0.0.1", PeerPort => 6666, Proto => "tcp", Type => SOCK_STREAM); #$s = "Hey äöü!"; # #my $send_length = pack("L", length($s)); #$socket->send($send_length); #$socket->send($s); while(true) { #STDOUT->flush(); my $len; $socket->recv($len, 4); my $actual_len = unpack("L", $len); if ($actual_len == 0) { print("not connected"); exit; } print("still connected"); my $s2; $socket->recv($s2, ord($len)); print($s2); STDOUT->flush(); #$s = `bash -c '$s2' 2>&1`; $s = ""; $command = $s2 . "\necho MAGIC\n"; print $in $command; inner_while: while (true) { $line = <$out>; if ($line eq "MAGIC\n") { STDOUT->flush(); last inner_while; } $s = $s . $line; } print "got complete output"; print $s; print length($s); STDOUT->flush(); my $send_length = pack("L", length($s)); $socket->send($send_length); $socket->send($s); my $exit_code = pack("L", 0); $socket->send($exit_code); }