#!/usr/bin/perl -w # FIXME perl -Tw : taint use strict; # for bidirectional ipc to mariposa-4 use FileHandle; use IPC::Open2; # talk to clients over network use Socket; use Carp; # find mariposa-4 BEGIN { $ENV{PATH} = '/usr/local/bin:/usr/bin/:bin:.' } # BEGIN { $ENV{PATH} = '/usr/ucb:/bin' } # perlipc(1) my $pid = open2(*Reader, *Writer, "mariposa-4"); print Writer "stuff\n"; my $got = ; ### open sockets for clients # perlipc(1) my $EOL = "\015\012"; sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" } # players: # o 0 4444 # x 1 4445 my $porto = 4444; my $portx = 4445; my $proto = getprotobyname('tcp'); socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!"; setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) || die "setsockopt: $!"; bind(Server, sockaddr_in($porto, INADDR_ANY)) || die "bind: $!"; listen(Server,SOMAXCONN) || die "listen: $!"; logmsg "server started on port $porto"; my $paddr; $SIG{CHLD} = \&REAPER; for ( ; $paddr = accept(Client,Server); close Client) { my($porto,$iaddr) = sockaddr_in($paddr); my $name = gethostbyaddr($iaddr,AF_INET); logmsg "connection from $name [", inet_ntoa($iaddr), "] at port $porto"; print Client "Hello there, $name, it's now ", scalar localtime, $EOL; }