Книга: Основы программирования в Linux

Адреса сокетов

Адреса сокетов

Каждый домен сокетов требует своего формата адресов. В домене AF_UNIX адрес описывается структурой sockaddr_un, объявленной в заголовочном файле sys/un.h: 

struct sockaddr_un {
 sa_family_t sun_family; /* AF_UNIX */
 char sun_path[];        /* Путь к файлу */
};

Для того чтобы адреса разных типов могли передаваться в системные вызовы для обработки сокетов, все адресные форматы описываются похожей структурой, которая начинается с поля (в данном случае sun_family), задающего тип адреса (домен сокета). В домене AF_UNIX адрес задается именем файла в поле структуры sun_path.

В современных системах Linux тип sa_family_t, описанный в стандарте X/Open как объявляемый в заголовочном файле sys/un.h, интерпретируется как тип short. Кроме того, размер pathname, задаваемого в поле sun_path, ограничен (в Linux указывается 108 символов; в других системах может применяться именованная константа, например, UNIX_MAX_PATH). Поскольку размер адресной структуры может меняться, многие системные вызовы сокетов требуют или предоставляют на выходе длину, которая будет использоваться для копирования конкретной адресной структуры.

В домене AF_INET адрес задается с помощью структуры с именем sockaddr_in, определенной в файле netinet/in.h, которая содержит как минимум следующие элементы:

struct sockaddr_in {
 short int sin_family;        /* AF_INET */
 unsigned short int sin_port; /* Номер порта */
 struct in_addr sin_addr;     /* Интернет-адрес */
};

Структура IP-адреса типа in_addr определена следующим образом:

struct in_addr {
 unsigned long int s_addr;
};

Четыре байта IP-адреса образуют одно 32-разрядное значение. Сокет домена AF_INET полностью описывается IP-адресом и номером порта. С точки зрения приложения все сокеты действуют как файловые дескрипторы, и их адреса задаются уникальными целочисленными значениями.

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


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