IO::Socket::INET::Daemon

Section: User Contributed Perl Documentation (3pm)
Updated: 2008-05-11
Index Return to Main Contents
 

NAME

IO::Socket::INET::Daemon - very simple straightforward TCP server  

SYNOPSIS

        use IO::Socket::INET::Daemon;

        my $host = new IO::Socket::INET::Daemon(
                port => 5000,
                timeout => 20,
                callback => {
                        add => \&add,
                        remove => \&remove,
                        data => \&data,
                },
        );

        $host->run;

        sub add {
                my $io = shift;

                $io->print("Welcome, ", $io->peerhost, ".\n");

                return !0;
        }

        sub remove {
                my $io = shift;

                warn $io->peerhost, " left.\n";
        }

        sub data {
                my ($io, $host) = @_;

                my $line = $io->getline;

                $line =~ s/\r?\n//;

                if($line eq 'quit') {
                        $io->print("Bye.\n");
                        return 0;
                }
                elsif($line eq 'stop') {
                        $host->stop;
                }
                else {
                        $io->print("You wrote: $line\n");
                        return !0;
                }
        }

 

DESCRIPTION

This modules aims to provide a simple TCP server. It will listen on a port you specify, accept incoming connections and remove them again when they're dead. It provides three simple callbacks at the moment, but I plan to add a few more.  

METHODS

new(...)
This is the constructor. It takes all the information the server needs as parameter. Currently, the following options are supported.
port
The port to listen on.
host
The host to bind to (hostname or IP).
timeout
The time to wait for actions in seconds. This is simply passed to IO::Select.
callback
A hash with function references assigned to callback names. Currently, four callbacks are supported. ``add'' is called when a new connection was accepted. If it returns a false value, the connection is kicked again right away. ``remove'' is called when a connection got lost. ``data'' is called when there's pending data on a connection. If the callback function returns false, the connection is removed afterwards. ``tick'' is called at the beginning of every cycle, that means at least every timeout seconds, or earlier if the select returned early because of incoming traffic. All callbacks except ``tick'' are called with the peer socket and the daemon object itself as argument (IO::Socket::INET). Tick get's undef instead of the peer socket.
callback(add => \&add, remove => \&remove, data => \&data)
This method overwrites callbacks set up with the constructor.
run(no parameters at all)
Enter the main loop. Won't ever return.
stop(no parameters here)
This can be called from a callback to stop the server. This simply sets a variable, so after the next cycle the server breaks out of the main loop. At the moment, if you run the server again after stopping it, it will completely start over again, so all connections etc. are lost. This might probably change in future.
remove(peer)
This takes a client connection (IO::Socket::INET) as argument, closes the connection and removes it from the internal connection list. You can use this in your callbacks to explicitly kill connections. If you return a false value from the ``data'' or ``add'' callback, this is called automatically.
destroy(nothing)
This method closes all client connections and the server socket itself. It is usually called by the DESTROY descructor, but you probably want to explicitly call this for sometime.
 

BUGS

This module was hacked together within a few minutes, so there are probably lots of bugs. On the other hand, it's very few code, so there can't be that much bugs in it. Just try it out and tell me if it's broken.  

TODO

Add tests to the package.
 

COPYRIGHT

Copyright (C) 2008 by Jonas Kramer <jkramer@cpan.org>. Published under the terms of the Artistic License 2.0.


 

Index

NAME
SYNOPSIS
DESCRIPTION
METHODS
BUGS
TODO
COPYRIGHT

This document was created by