Книга: 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 на неприсоединенном сокете, эта функция должна работать для любого дескриптора открытого сокета.

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


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