All pastes #107059 Raw Edit

Lateralus

public text v1 · immutable
#107059 ·published 2006-07-30 20:18 UTC
rendered paste body
#!/usr/bin/perl -w

use strict;
use MultiplexServer;

my $server = MultiplexServer->new();
$server->addr('127.0.0.1');
$server->port(9090);
$server->proto('tcp');
$server->listen(16);
$server->reuse(1);
$server->start();
$server->check();



use strict;
use IO::Socket::INET;
use IO::Select;

{   package MultiplexServer;
 
    # Constructor
    sub new {
        my ( $class ) = @_;
        my $self = {
                    _connected => 0,
                    _addr => undef,
                    _port => undef,
                    _proto => undef,
                    _listen => undef,
                    _reuse => undef,
                    _listening => undef,
                    _readset => undef,
                    _writeset => undef
                   };
        bless $self, $class;
        return $self;
    }
    
    # Getters/Setters
    sub connected {
        my ( $self ) = @_;
        return $self->{_connected};
    }
    sub addr {
        my ( $self, $addr ) = @_;
        $self->{_addr} = $addr if defined($addr);
        return $self->{_addr};
    }
    sub port {
        my ( $self, $port ) = @_;
        $self->{_port} = $port if defined($port);
        return $self->{_port};
    }
    sub proto {
        my ( $self, $proto ) = @_;
        $self->{_proto} = $proto if defined($proto);
        return $self->{_proto};
    }
    sub listen {
        my ( $self, $listen ) = @_;
        $self->{_listen} = $listen if defined($listen);
        return $self->{_listen};
    }
    sub reuse {
        my ( $self, $reuse ) = @_;
        $self->{_reuse} = $reuse if defined($reuse);
        return $self->{_reuse};
    }
    
    sub start {
        my ( $self ) = @_;
        $self->{_listening} = IO::Socket::INET->new(
                                                    LocalAddr =>    $self->{_addr},
                                                    LocalPort =>    $self->{_port},
                                                    Proto     =>    $self->{_proto},
                                                    Listen    =>    $self->{_listen},
                                                    Reuse     =>    $self->{_reuse}
                                                    );
        die "Could not create socket: $!\n" unless $self->{_listening};
        
        $self->{_writeset} = IO::Select->new();
        $self->{_readset} = IO::Select->new($self->{_listening});
        
        1;
    }
    
    sub check {
        my ( $self ) = @_;
        while (1) {
            my ( @read_handles, @write_handles ) = IO::Select->select($self->{_readset}, $self->{_writeset}, undef);
            
            foreach my $rh (@read_handles) {
                if ($rh == $self->{_listening}) {
                    print 'New connection received!!';
                }
            }
        }
    }
    1;
}