The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::TCP::Server - TCP sockets interface module for listeners and servers

SYNOPSIS

    use Socket;                 # optional
    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 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 <URL:http://www.rosat.mpe-garching.mpg.de/mailing-lists/perl-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

tags

none

AUTHOR

Spider Boardman <spider@Orb.Nashua.NH.US>