| Net-ext documentation | view source | Contained in the Net-ext distribution. |
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::TCP,
Net::Inet|Net::Inet,
and
Net::Gen|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::TCP,
Net::Inet|Net::Inet,
or
Net::Gen|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 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.
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.
Spider Boardman <spidb@cpan.org>
| Net-ext documentation | view source | Contained in the Net-ext distribution. |