use strict;
use warnings;

use IO::Socket::INET;
use IO::Handle;

my $s = IO::Socket::INET->new(
  PeerAddr => $ARGV[0],
  PeerPort => $ARGV[1],
) or die "failed to open $ARGV[0]:$ARGV[1]";

my $i = IO::Handle->new_from_fd(*STDIN, q/r/);
my $o = IO::Handle->new_from_fd(*STDOUT, q/w/);
my $buf;
while ( my $bytes = $i->read($buf, 256) ) {
  $s->syswrite($buf);
  $s->read($buf,$bytes);
  $o->syswrite($buf);
}