Alvis-Saa
view release on metacpan or search on metacpan
lib/Alvis/Saa.pm view on Meta::CPAN
package Alvis::Saa;
$Alvis::Saa::VERSION = '0.2';
use strict;
use Alvis::Tana;
# use Data::Dumper;
use Sys::Hostname;
use IO::Socket;
use IO::Select;
use Fcntl;
my $LOCALADDR_PREFIX = "/var/tmp/searchrpc_localsoc_";
my $debug = 0;
######################################################################
#
# Public methods
#
###################################################################
sub new
{
my ($this) = @_;
my $class = ref($this) || $this;
my $my_addr = gethostbyname(hostname());
if(!defined($my_addr))
{
return undef;
}
$this = {
'servs' => {},
'serv_sel' => IO::Select->new(),
'conns' => {},
'conn_sel' => IO::Select->new(),
'ip_clis' => {},
'my_addr' => $my_addr,
'err' => '',
'queue' => [],
};
bless $this, $class;
$SIG{'PIPE'} = 'IGNORE';
return $this;
}
sub err
{
my $this = shift;
return $this->{'err'};
}
# 'auto_arb' => bool # Autoread arb messages?
# 'callback' => [func, params]
sub listen
{
my $this = shift;
my $port = shift;
my %par = @_;
if(exists($this->{'servs'}->{$port}))
{
$this->{'err'} = "Already listening";
return 0;
}
my $serv =
{
'port' => $port,
'auto_arb' => 0,
};
if(exists($par{'callback'}))
{
$serv->{'callback'} = $par{'callback'};
}
if(exists($par{'auto_arb'}))
{
$serv->{'auto_arb'} = $par{'auto_arb'};
}
my $inet_sock = IO::Socket::INET->new(LocalPort => $port,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 10);
if(!defined($inet_sock))
{
$this->{'err'} = "$@";
return 0;
}
# print STDERR "Soketti on $LOCALADDR_PREFIX$port\n";
unlink "$LOCALADDR_PREFIX$port";
my $unix_sock = IO::Socket::UNIX->new(Local => "$LOCALADDR_PREFIX$port",
Type => SOCK_STREAM,
Listen => 10);
if(!defined($unix_sock))
( run in 2.265 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )