# IO::Socket::UNIX.pm # # Copyright (c) 1997-8 Graham Barr . 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__ =head1 NAME IO::Socket::UNIX - Object interface for AF_UNIX domain sockets =head1 SYNOPSIS use IO::Socket::UNIX; my $SOCK_PATH = "$ENV{HOME}/unix-domain-socket-test.sock"; # Server: my $server = IO::Socket::UNIX->new( Type => SOCK_STREAM(), Local => $SOCK_PATH, Listen => 1, ); my $count = 1; while (my $conn = $server->accept()) { $conn->print("Hello " . ($count++) . "\n"); } # Client: my $client = IO::Socket::UNIX->new( Type => SOCK_STREAM(), Peer => $SOCK_PATH, ); # Now read and write from $client =head1 DESCRIPTION C provides an object interface to creating and using sockets in the AF_UNIX domain. It is built upon the L interface and inherits all the methods defined by L. =head1 CONSTRUCTOR =over 4 =item new ( [ARGS] ) Creates an C object, which is a reference to a newly created symbol (see the C package). C optionally takes arguments, these arguments are in key-value pairs. In addition to the key-value pairs accepted by L, C provides. Type Type of socket (eg SOCK_STREAM or SOCK_DGRAM) Local Path to local fifo Peer Path to peer fifo Listen Queue size for listen If the constructor is only passed a single argument, it is assumed to be a C specification. If the C argument is given, but false, the queue size will be set to 5. =back =head1 METHODS =over 4 =item hostpath() Returns the pathname to the fifo at the local end =item peerpath() Returns the pathanme to the fifo at the peer end =back =head1 SEE ALSO L, L =head1 AUTHOR Graham Barr. Currently maintained by the Perl Porters. Please report all bugs to . =head1 COPYRIGHT Copyright (c) 1996-8 Graham Barr . All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut