Книга: Разработка приложений в среде Linux. Второе издание

17.4.1. Адреса домена Unix

17.4.1. Адреса домена Unix

Адреса для сокетов домена Unix являются путевыми именами в файловой системе. Если файл еще не существует, то он создается как файл сокетного типа в тот момент, когда сокет привязывается к путевому имени через функцию bind(). Если уже существует файл (или даже сокет) с указанным путевым именем, то функция bind() завершается и возвращает значение EADDRINUSE, bind() устанавливает права доступа для созданного файла сокета равными 0666, как измененные текущей маской umask.

Для того чтобы присоединиться к существующему сокету, процесс должен иметь права на чтение и запись в файл сокета[123].

Адреса сокетов домена Unix передаются через структуру struct sockaddr_un.

#include <sys/socket.h>
#include <sys/un.h>
struct sockaddr_un {
 unsigned short sun_family;    /* AF_UNIX */
 char sun_path[UNIX_PATH_MAX]; /* путевое имя */
};

В ядре Linux 2.6.7 значение переменной UNIX_PATH_MAX равно 108, но в последующих версиях ядра Linux оно может измениться.

Первый член sun_family должен содержать AF_UNIX для того, чтобы показать, что структура содержит адрес домена Unix. Параметр sun_path хранит путевое имя, которое нужно использовать для соединения. Если системным вызовам, относящимся к сокету, передается размер адреса, то передаваемая длина равна количеству символов в путевом имени плюс размер элемента sun_family. Параметр sun_path не обязательно должен заканчиваться '', хотя обычно делают именно так.

Оглавление книги


Генерация: 0.930. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз