Usage:
$obj = new Net::TCP::Server;
$obj = new Net::TCP::Server $service;
$obj = new Net::TCP::Server $service, \%parameters;
$obj = new Net::TCP::Server $lcladdr, $service, \%parameters;
$obj = 'Net::TCP::Server'->new();
$obj = 'Net::TCP::Server'->new($service);
$obj = 'Net::TCP::Server'->new($service, \%parameters);
$obj = 'Net::TCP::Server'->new($lcladdr, $service, \%parameters);
Returns a newly-initialised object of the given class. This is
much like the regular "new" method of
the other modules in this distribution, except that it makes it easier
to specify just a service name or port number, and it automatically does
a setsockopt() call to set
"SO_REUSEADDR" to make the
bind() more likely to succeed. The
"SO_REUSEADDR" is really done in a
base class, but it's enabled by defaulting the
"reuseaddr" object parameter to 1 in
this constructor.
The examples above show the indirect object syntax which many
prefer, as well as the guaranteed-to-be-safe static method call. There
are occasional problems with the indirect object syntax, which tend to
be rather obscure when encountered. See
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-01/msg01674.html
for details.
Simple example for server setup:
$lh = 'Net::TCP::Server'->new(7788) or die;
while ($sh = $lh->accept) {
defined($pid=fork) or die "fork: $!\n";
if ($pid) { # parent doesn't need client fh
$sh->stopio;
next;
}
# child doesn't need listener fh
$lh->stopio;
# do per-connection stuff here
exit;
}
Note that signal-handling for the child processes is not
included in this example. See "Internet TCP Clients and
Servers" in perlipc for related examples which manage subprocesses.
However, on many operating systems, a simple
"$SIG{CHLD} = 'IGNORE';" will prevent
the server process from collecting `zombie' subprocesses.