child started IO::Socket::INET=GLOB(0x204aeb8) child read failed: Invalid argument at E:\Perls\sock_hop.pl line 63. parent started IO::Socket::INET=GLOB(0x176541c) parent sending parent sending parent sending parent write failed: Invalid argument #### use strict; use warnings; use IO::Socket; sub process; sub parent; sub child; use vars qw[$PARENT $CHILD]; process; exit; sub process { $PARENT = IO::Socket::INET->new( Type => SOCK_STREAM, Proto => 'tcp', LocalHost => 'localhost', LocalPort => 9969, Listen => 5, ); die "parent socket failed: $!\n" unless defined $PARENT; $CHILD = IO::Socket::INET->new( Type => SOCK_STREAM, Proto => 'tcp', PeerAddr => 'localhost', PeerPort => 9969, ); die "child socket failed: $!\n" unless defined $CHILD; if (my $pid = fork()) { close $PARENT; parent; } else { die "fork failed: $!\n" unless defined $pid; close $CHILD; child; } } sub parent { print STDERR "parent started $CHILD\n"; while (1) { print STDERR "parent sending\n"; print $CHILD "Hello from parent\n" or die "parent write failed: $!\n"; sleep 2; } } sub child { print STDERR "child started $PARENT\n"; while (1) { my $line = readline ($PARENT); die "child read failed: $!" unless defined $line; print STDERR $line; } }