69 lines
1.3 KiB
Perl
69 lines
1.3 KiB
Perl
# IO::Socket::UNIX.pm
|
|
#
|
|
# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the same terms as Perl itself.
|
|
|
|
package IO::Socket::UNIX;
|
|
|
|
use strict;
|
|
our(@ISA, $VERSION);
|
|
use IO::Socket;
|
|
use Carp;
|
|
|
|
@ISA = qw(IO::Socket);
|
|
$VERSION = "1.26";
|
|
$VERSION = eval $VERSION;
|
|
|
|
IO::Socket::UNIX->register_domain( AF_UNIX );
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
unshift(@_, "Peer") if @_ == 1;
|
|
return $class->SUPER::new(@_);
|
|
}
|
|
|
|
sub configure {
|
|
my($sock,$arg) = @_;
|
|
my($bport,$cport);
|
|
|
|
my $type = $arg->{Type} || SOCK_STREAM;
|
|
|
|
$sock->socket(AF_UNIX, $type, 0) or
|
|
return undef;
|
|
|
|
if(exists $arg->{Local}) {
|
|
my $addr = sockaddr_un($arg->{Local});
|
|
$sock->bind($addr) or
|
|
return undef;
|
|
}
|
|
if(exists $arg->{Listen} && $type != SOCK_DGRAM) {
|
|
$sock->listen($arg->{Listen} || 5) or
|
|
return undef;
|
|
}
|
|
elsif(exists $arg->{Peer}) {
|
|
my $addr = sockaddr_un($arg->{Peer});
|
|
$sock->connect($addr) or
|
|
return undef;
|
|
}
|
|
|
|
$sock;
|
|
}
|
|
|
|
sub hostpath {
|
|
@_ == 1 or croak 'usage: $sock->hostpath()';
|
|
my $n = $_[0]->sockname || return undef;
|
|
(sockaddr_un($n))[0];
|
|
}
|
|
|
|
sub peerpath {
|
|
@_ == 1 or croak 'usage: $sock->peerpath()';
|
|
my $n = $_[0]->peername || return undef;
|
|
(sockaddr_un($n))[0];
|
|
}
|
|
|
|
1; # Keep require happy
|
|
|
|
__END__
|
|
|