Книга: UNIX: разработка сетевых приложений
Пример: получение семейства адресов сокета
Разделы на этой странице:
Пример: получение семейства адресов сокета
Функция sockfd_to_family
, представленная в листинге 4.4, возвращает семейство адресов сокета.
Листинг 4.4. Возвращаемое семейство адресов сокета
//lib/sockfd_to_family.c
1 #include "unp.h"
2 int
3 sockfd_to_family(int sockfd)
4 {
5 union {
6 struct sockaddr sa;
7 char data[MAXSOCKADDR];
8 } un;
9 socklen_t len;
10 len = MAXSOCKADDR;
11 if (getsockname(sockfd, (SA*)un.data, &len) < 0)
12 return (-1);
13 return (un.sa.sa_family);
14 }
Выделение пространства для наибольшей структуры адреса сокета
5-8
Поскольку мы не знаем, какой тип структуры адреса сокета нужно будет разместить в памяти, мы используем в нашем заголовочном файле unp.h
константу MAXSOCKADDR
, которая представляет собой размер наибольшей структуры адреса сокета в байтах. Мы определяем массив типа char
соответствующего размера в объединении, включающем универсальную структуру адреса сокета.
Вызов функции getsockname
10-13
Мы вызываем функцию getsockname
и возвращаем семейство адресов.
Поскольку POSIX позволяет вызывать функцию getsockname
на неприсоединенном сокете, эта функция должна работать для любого дескриптора открытого сокета.
- Пример установочного скрипта
- Пример из практики
- Получение статистики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Семерка - первый шаг нового семейства
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры
- 2. Пример создания базового отношения в записи на псевдокоде