Функционально-ориентированный интерфейс к сокетам домена UNIX
Создание сокетов домена UNIX с помощью функционально-ориентированного интерфейса аналогично созданию сокетов TCP/IP, к примеру, для получения страницы сайта, описывающей создание сайтов Одесса . Для создания сокета вызывается функция socket (), для отправки исходящего запроса на установление соединения применяется функция connect ( ), а для приема входящих запросов на установление соединения служат функции bind (), listen () и accept ().
Для создания сокета домена UNIX нужно вызвать функцию socket (), указав тип домена AF_UNIX и протокол PF_UNSPEC (сокращение от protocol unspecified — неопределенный протокол). Эти константы экспортируются модулем Socket. Пользователь вправе создать сокет SOCK_STREAM или SOCK_DGRAM.
use Socket ;
socket (S, AFJJNIX, ,SOCK_STREAM, PF_UNSPEC) or die "Can’t create stream socket: $!";
socket(D, AFJJNIX, SOCK_DGRAM, PF_UNSPEC)
or die "Can’t create datagram socket: $!";
После создания сокета можно отправить ожидающему серверу исходящий запрос на установление соединения, вызвав функцию connect (). Основное отличие состоит в том, что необходимо вначале создать адрес встречи с использованием полного имени файла и вспомогательной функции sockaddr_un (). В следующем фрагменте кода показано, как выполнить подключение к серверу, который принимает запрос по адресу: /tmp/daytime.
my $dest = sockaddr_un('/tmp/daytime');
connect (S, $dest) or die "Canon connect: $!";
Адрес домена UNIX — это просто полное имя файла, которое дополняется до установленной длины нулевыми байтами и может быть создано с помощью функции sockaddr_un (). Члены семейства функций sockaddr_un () подобны своим аналогам, предназначенным для работы с IР-адресами.
В скалярном контексте функция sockaddr_un () принимает полное имя файла и преобразует его в адрес назначения домена UNIX, пригодный для использования в функциях: bind () и connect (). В контексте массива функция sockaddr_un () выполняет обратное действие, что может применяться для интерпретации значения, возвращенного функциями recv() и getsockname().
Если такое поведение функций sockaddr_un (), которое зависит от контекста вам нё нравится, вместо нее, вы можете применять функции pack_sockaddr_un () и unpack_sockaddr_un ().