Event::IO::Server - general listener class, spawns client connections


Event-IO documentation Contained in the Event-IO distribution.

Index


Code Index:

NAME

Top

Event::IO::Server - general listener class, spawns client connections

METHODS

Top

new ( named parameters... )

spawn

Class for new connection objects, should inherit from Event::IO::Linear.

handle

IO::Socket handle for listener (should be ::INET or ::UNIX; it's a good idea to set ReuseAddr for INET clients).

data

Optional parameter, passed to child init_event.

data

Get/set data parameter to pass to init_event (can also set in new).

client_event

Called when we get a new client (select 'read' event).

AUTHOR

Top

David B. Robins <dbrobins@davidrobins.net>


Event-IO documentation Contained in the Event-IO distribution.
package Event::IO::Server;

use strict;
our $VERSION = '0.01';

use Event;


sub new {
  my ($class,%param) = @_;

  # check parameters
  my ($spawn,$handle,$data) = delete @param{qw(spawn handle data)};
  die 'unknown parameter(s): '.(join ', ',keys %param) if keys %param;

  # create object
  my $self = bless { spawn => $spawn, data => $data, handle => $handle },
   ref $class || $class;

  # this is a listening socket
  $self->{handle}->listen();

  # we'd like to know when we get clients
  Event->io(fd => $self->{handle}, poll => 'r', cb => [$self,'client_event']);

  return $self;
}


sub data {
  my $self = shift;
  $self->{data} = shift if @_;
  return $self->{data};
}


sub client_event {
  my $self = shift;
  my $sock = $self->{handle}->accept();
  my $client = $self->{spawn}->new(handle => $sock, init => 0);
  $client->init_event($self->{data}) if $client->can('init_event');
}



1;