DDLock-Server
view release on metacpan or search on metacpan
use Carp;
use POSIX ();
use DDLock::Server;
my %args;
Getopt::Long::GetOptions(
'd|daemon' => \(my $daemonize),
'p|port=i' => sub { $args{port} = $_[1] },
'n|no-keepalive' => sub { $args{nokeepalive}++ },
'e|engine=s' => sub { $args{engine} = $_[1] },
'h|hostname=s' => sub { $args{hostname} = $_[1] },
'T|table=s' => sub { $args{table} = $_[1] },
);
daemonize() if $daemonize;
$SIG{'PIPE'} = "IGNORE"; # handled manually
my $ddlock = DDLock::Server->new(%args);
lib/DDLock/Server.pm view on Meta::CPAN
use strict;
use warnings;
use Danga::Socket;
use IO::Socket::INET;
use Socket qw(IPPROTO_TCP SO_KEEPALIVE TCP_NODELAY SOL_SOCKET);
# Linux-specific:
use constant TCP_KEEPIDLE => 4; # Start keeplives after this period
use constant TCP_KEEPINTVL => 5; # Interval between keepalives
use constant TCP_KEEPCNT => 6; # Number of keepalives before death
sub new {
my $class = shift;
my %args = @_;
$args{port} = 7002
unless defined $args{port};
$args{lock_type} = "internal"
lib/DDLock/Server.pm view on Meta::CPAN
# obviously sets it from watching strace.
IO::Handle::blocking($server, 0);
my $accept_handler = sub {
my $csock = $server->accept();
return unless $csock;
IO::Handle::blocking($csock, 0);
setsockopt($csock, IPPROTO_TCP, TCP_NODELAY, pack("l", 1)) or die;
# Enable keep alive
unless ( $args{nokeepalive} ) {
(setsockopt($csock, SOL_SOCKET, SO_KEEPALIVE, pack("l", 1)) &&
setsockopt($csock, IPPROTO_TCP, TCP_KEEPIDLE, pack("l", 30)) &&
setsockopt($csock, IPPROTO_TCP, TCP_KEEPCNT, pack("l", 10)) &&
setsockopt($csock, IPPROTO_TCP, TCP_KEEPINTVL, pack("l", 30)) &&
1
) || die "Couldn't set keep-alive settings on socket (Not on Linux?)";
}
my $client = $client_class->new($csock);
$client->watch_read(1);
};
DDLock::Server::Client->OtherFds(fileno($server) => $accept_handler);
return $client_class;
}
( run in 0.589 second using v1.01-cache-2.11-cpan-39bf76dae61 )