$sockserv = new IO::Socket::INET( LocalAddr => '192.168.1.1',
LocalPort => $port,
Proto => 'tcp',
Listen => 1,
Reuse => 1,
Timeout => 60);
die "can't start server: ($!)\n" unless $sockserv;
$x = IO::Select->new();
$x->add($sockserv);
while(1)
{
@handles = $x->can_read();
foreach $handle (@handles)
{
if($handle == $sockserv)
{
$sockclient = $sockserv->accept() || warn "accept: $!";
$clients++;
if ($clients > 5)
{
print $sockclient "Sorry, we're full.\n";
$sockclient->close();
} else
{
$sockclients[$clients] = $sockclient;
}
$x->add($sockclients[$clients]);
}
($cl) = grep($sockclients[$_] == $handle, (0..$#sockclients));
if ($cl)
{
$n_read = sysread($sockclients[$cl], $buf, 1024);
return 0 if (!n_read || !length $buf);
parse_external_command($buf, $sockclients[$cl]);
}
}
}
something like that.. where parse_external_command() reads what the client said, and answers via the passed in socket if necessary.
C. |