Lock-Socket

 view release on metacpan or  search on metacpan

lib/Lock/Socket.pm  view on Meta::CPAN

package Lock::Socket::Mo;

#<<< Do not perltidy this
BEGIN {
# use Mo qw'builder default import is required';
#   The following line of code was produced from the previous line by
#   Mo::Inline version 0.39
no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.::.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M...
$INC{'Lock/Socket/Mo.pm'} = __FILE__;
}
1;
#>>>

package Lock::Socket::Error;
use Lock::Socket::Mo;
use overload '""' => sub { $_[0]->msg }, fallback => 1;

has msg => (
    is       => 'ro',
    required => 1,
);

1;

package Lock::Socket;
use strict;
use warnings;
use Carp ();
use Lock::Socket::Mo;
use Socket;

our @VERSION = '0.0.6';
our @CARP_NOT;

@Lock::Socket::Error::Bind::ISA   = ('Lock::Socket::Error');
@Lock::Socket::Error::Socket::ISA = ('Lock::Socket::Error');
@Lock::Socket::Error::Usage::ISA  = ('Lock::Socket::Error');
@Lock::Socket::Error::Import::ISA = ('Lock::Socket::Error');

### Function Interface ###

sub _uid_ip {
    return join( '.', 127, unpack( 'C2', pack( "n", $< ) ), 1 )
      unless $^O =~ m/bsd$/ or $^O eq 'darwin';
    return '127.0.0.1';
}

sub lock_socket {
    my $port = shift
      || __PACKAGE__->err( 'Usage', 'usage: lock_socket($PORT)' );
    my $addr = shift;

    my $sock = Lock::Socket->new(
        port => $port,
        defined $addr ? ( addr => $addr ) : (),
    );
    $sock->lock;
    return $sock;
}

sub lock_user_socket {
    my $port = shift
      || __PACKAGE__->err( 'Usage', 'usage: lock_user_socket($PORT)' );
    my $addr = shift;

    my $sock = Lock::Socket->new(
        port => $port + $<,
        addr => $addr || _uid_ip,



( run in 1.245 second using v1.01-cache-2.11-cpan-97f6503c9c8 )