#!/usr/bin/perl use IO::Socket; use IO::Select; # use URI::Escape; # you'll need this later i guess ... $verb = 5; # verbosity for console messages $main = new IO::Socket::INET (LocalHost => 'stray.ch', LocalPort => 4445, Listen => 5, Proto => 'tcp', Reuse => 1 ) || die $!; $zero = chr(0); $/ = $zero; $\ = $zero; $| = 1; # Initialise IO::Select ------------------------------------------------ $handles = new IO::Select(); $handles->add($main); print "Starting listening cycle\n" if ($verb > 1); LISTEN: while (1) { ($pending) = IO::Select->select($handles, undef, undef, 60); foreach $sock (@$pending) { if ($sock == $main) { $num++; print "Got new connection: $num from ".$sock->sockhost()."\n" if ($verb > 2); my $newsock = $sock->accept(); $newsock->autoflush(); $number{$newsock} = $num; $handles->add($newsock); } else { my $buf = <$sock>; if ($buf) { print "Existing socket $number{$sock} is pending: " if ($verb > 3); chomp $buf; print "$buf\n" if ($verb > 3); ($data) = $buf =~ /data="(.*?)"/; print $sock qq||; } else { print "Socket $number{$sock} is gone.\n" if ($verb > 2); $handles->remove($sock); } } } }