use IO::Socket; use IO::Select; use Time::HiRes; $SIG{PIPE}='IGNORE'; $m=new IO::Socket::INET(Listen=>1,LocalPort=>8181); $O=new IO::Select($m); $/ = "\0"; while (@S = $O->can_read) { foreach (@S) { if ($_==$m) { $C=$m->accept; $O->add($C); } else { my $R=sysread($_, $i, 16000); # Log message received: print "XmlSocketServer: received \"$i\"\n"; if ($R==0) { $T=syswrite($_, "\n", 16000); if ($T==undef) { $O->remove($_); $_->close; } } else { # Sleep a bit before sending a reply to mimic web traffic # (well, sort of). Time::HiRes::sleep(0.5); print "XmlSocketServer: sending \"$i\" \n"; $i =~ s/\*NEWLINE\*/\n/g; $i =~ s/\*NULL\*/\0/g; foreach $C($O->handles) { $T=syswrite($C, $i, 16000); } # Close client when receive the if ($i =~ //ig ) { $O->remove($_); $_->close; } } } } }