johnnywang has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm trying to write a simple interactive TCP client that talks to a server, which is written in POE (nonblocking). I'm running the server on win32/cygwin. The following client code is directly from the Cookbook, it works fine from a linux box, but hangs on win32/cygwin, after I type something and hit retern. There are no errors given, just hangs (it takes no inputs, and prints no responses). What can be the issues here? (I guess I probably should check the packets using ethereal, but is there a perlish reason?) By the way, a client using POE works fine also, so probably not the server problem.
#!/usr/bin/perl -w # biclient - bidirectional forking client use strict; use IO::Socket; my ($host, $port, $kidpid, $handle, $line); unless (@ARGV == 2) { die "usage: $0 host port" } ($host, $port) = @ARGV; # create a tcp connection to the specified host and port $handle = IO::Socket::INET->new(Proto => "tcp", PeerAddr => $host, PeerPort => $port) or die "can't connect to port $port on $host: $!"; $handle->autoflush(1); # so output gets there right away print STDERR "[Connected to $host:$port]\n"; # split the program into two processes, identical twins die "can't fork: $!" unless defined($kidpid = fork()); if ($kidpid) { # parent copies the socket to standard output while (defined ($line = <$handle>)) { print STDOUT $line; } kill("TERM" => $kidpid); # send SIGTERM to child } else { # child copies standard input to the socket while (defined ($line = <STDIN>)) { print $handle $line; } } exit;