my $protocol = getprotobyname('tcp'); socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "No socket: $!"; setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "No SO_REUSEADDR: $!"; my $my_addr = sockaddr_in($port, INADDR_ANY); bind(SOCK, $my_addr) or die "No bind: $!"; listen(SOCK,SOMAXCONN) or die "No listen: $!"; warn "listening on port $port...\n"; while ( 1 ) { next unless my $remote_addr = accept(SESSION, SOCK); my ($port, $hisaddr) = sockaddr_in($remote_addr); warn "Connection from [",inet_ntoa($hisaddr),",$port]\n"; SESSION->autoflush(1); while() { $bytes{'in'} += length($_); chomp; my $msg_out = scalar reverse $_ . "\n"; print SESSION $msg_out; $bytes{'out'} += length($msg_out); } warn "Connection from [",inet_ntoa($hisaddr),",$port] finished\n"; close SESSION; } close SOCK; #### my $socket = IO::Socket::INET->new( Listen => 20, LocalPort => $port, Timeout => 5, #60 * 60, Reuse => 1) or die "No socket: $!"; warn "listening on port $port...\n"; while ( !$quit ) { next unless my $session = $socket->accept; my $peer = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost; my $port = $session->peerport; warn "Connection from [$peer,$port]\n"; while(<$session>) { #BLOCKS HERE $bytes{'in'} += length($_); chomp; my $msg_out = $_ . CRLF; $session->print($msg_out); print $msg_out; $bytes{'out'} += length($msg_out); } warn "Connection from [$peer,$port] finished\n"; close $session; } #### my $socket = IO::Socket::INET->new("$host:$port") or die "No connect: $!"; my $protocol = getprotobyname('tcp'); my $ok = 1; $socket->autoflush(1); while ( defined (my $msg_out = STDIN->getline) ) { last unless $ok; print $socket $msg_out; my $msg_in = <$socket>; print $msg_in; $bytes{'out'} += length($msg_out); $bytes{'in'} += length($msg_in); }