<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># IO::Socket::UNIX.pm
#
# Copyright (c) 1997-8 Graham Barr &lt;gbarr@pobox.com&gt;. 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;
use IO::Socket;
use Carp;

our @ISA = qw(IO::Socket);
our $VERSION = "1.52";

IO::Socket::UNIX-&gt;register_domain( AF_UNIX );

sub new {
    my $class = shift;
    unshift(@_, "Peer") if @_ == 1;
    return $class-&gt;SUPER::new(@_);
}

sub configure {
    my($sock,$arg) = @_;
    my($bport,$cport);

    my $type = $arg-&gt;{Type} || SOCK_STREAM;

    $sock-&gt;socket(AF_UNIX, $type, 0) or
	return undef;

    if(exists $arg-&gt;{Blocking}) {
        $sock-&gt;blocking($arg-&gt;{Blocking}) or
	    return undef;
    }
    if(exists $arg-&gt;{Local}) {
	my $addr = sockaddr_un($arg-&gt;{Local});
	$sock-&gt;bind($addr) or
	    return undef;
    }
    if(exists $arg-&gt;{Listen} &amp;&amp; $type != SOCK_DGRAM) {
	$sock-&gt;listen($arg-&gt;{Listen} || 5) or
	    return undef;
    }
    elsif(exists $arg-&gt;{Peer}) {
	my $addr = sockaddr_un($arg-&gt;{Peer});
	$sock-&gt;connect($addr) or
	    return undef;
    }

    $sock;
}

sub hostpath {
    @_ == 1 or croak 'usage: $sock-&gt;hostpath()';
    my $n = $_[0]-&gt;sockname || return undef;
    (sockaddr_un($n))[0];
}

sub peerpath {
    @_ == 1 or croak 'usage: $sock-&gt;peerpath()';
    my $n = $_[0]-&gt;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-&gt;new(
        Type =&gt; SOCK_STREAM(),
        Local =&gt; $SOCK_PATH,
        Listen =&gt; 1,
    );

    my $count = 1;
    while (my $conn = $server-&gt;accept()) {
        $conn-&gt;print("Hello " . ($count++) . "\n");
    }

    # Client:
    my $client = IO::Socket::UNIX-&gt;new(
        Type =&gt; SOCK_STREAM(),
        Peer =&gt; $SOCK_PATH,
    );

    # Now read and write from $client

=head1 DESCRIPTION

C&lt;IO::Socket::UNIX&gt; provides an object interface to creating and using sockets
in the AF_UNIX domain. It is built upon the L&lt;IO::Socket&gt; interface and
inherits all the methods defined by L&lt;IO::Socket&gt;.

=head1 CONSTRUCTOR

=over 4

=item new ( [ARGS] )

Creates an C&lt;IO::Socket::UNIX&gt; object, which is a reference to a
newly created symbol (see the L&lt;Symbol&gt; package). C&lt;new&gt;
optionally takes arguments, these arguments are in key-value pairs.

In addition to the key-value pairs accepted by L&lt;IO::Socket&gt;,
C&lt;IO::Socket::UNIX&gt; 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&lt;Peer&gt; specification.

If the C&lt;Listen&gt; argument is given, but false, the queue size will be set to 5.

If the constructor fails it will return C&lt;undef&gt; and set the
C&lt;$IO::Socket::errstr&gt; package variable to contain an error message.

    $sock = IO::Socket::UNIX-&gt;new(...)
        or die "Cannot create socket - $IO::Socket::errstr\n";

For legacy reasons the error message is also set into the global C&lt;$@&gt;
variable, and you may still find older code which looks here instead.

    $sock = IO::Socket::UNIX-&gt;new(...)
        or die "Cannot create socket - $@\n";

=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&lt;Socket&gt;, L&lt;IO::Socket&gt;

=head1 AUTHOR

Graham Barr. Currently maintained by the Perl Porters.  Please report all
bugs at L&lt;https://github.com/Perl/perl5/issues&gt;.

=head1 COPYRIGHT

Copyright (c) 1996-8 Graham Barr &lt;gbarr@pobox.com&gt;. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

=cut
</pre></body></html>