|
|
Net::TCP::Server - TCP sockets interface module for listeners and servers
use Net::Gen; # optional use Net::Inet; # optional use Net::TCP; # optional use Net::TCP::Server;
The Net::TCP::Server
module provides services for TCP communications
over sockets. It is layered atop the
Net::TCP
,
Net::Inet
,
and
Net::Gen
modules, which are part of the same distribution.
The following methods are provided by the Net::TCP::Server
module
itself, rather than just being inherited from
Net::TCP
,
Net::Inet
,
or
Net::Gen
.
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 the perlipc manpage 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.
none.
There are no socket options specific to the Net::TCP::Server
module.
There are no object parameters registered by the Net::TCP::Server
module itself.
none
none
none
This module has been tested with threaded perls, and should be as thread-safe as perl itself. (As of 5.005_03 and 5.005_57, that's not all that safe just yet.) It also works with interpreter-based threads ('ithreads') in more recent perl releases.
Net::TCP(3), Net::Inet(3), Net::Gen(3)
Spider Boardman <spidb@cpan.org>