NAME
Net::TCP::Server - TCP sockets interface module for listeners and servers
SYNOPSIS
use Net::Gen; # optional
use Net::Inet; # optional
use Net::TCP; # optional
use Net::TCP::Server;
DESCRIPTION
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.
Public Methods
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
.
- new
-
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 setSO_REUSEADDR
to make the bind() more likely to succeed. TheSO_REUSEADDR
is really done in a base class, but it's enabled by defaulting thereuseaddr
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.
Protected Methods
none.
Known Socket Options
There are no socket options specific to the Net::TCP::Server
module.
Known Object Parameters
There are no object parameters registered by the Net::TCP::Server
module itself.
Exports
- default
-
none
- exportable
-
none
-
none
THREADING STATUS
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.
SEE ALSO
Net::TCP(3), Net::Inet(3), Net::Gen(3)
AUTHOR
Spider Boardman <spidb@cpan.org>