UNIX: разработка сетевых приложений
Часть 379 из 399 Информация о книге
sizeof(sa_family_t))158 #else159 #define _SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(sa_family_t))160 #endif161 #define __SS_PAD2SIZE (__SS_MAXSIZE — 2*__SS_ALIGNSIZE)162 struct sockaddr_storage {163 #ifdef HAVE_SOCKADDR_SA_LEN164 u_char ss_len;165 #endif166 sa_family_t ss_family;167 char __ss_pad1[__SS_PAD1SIZE];168 int64_t ss_align;169 char __ss_pad2[_SS_PAD2SIZE];170 };171 #endif172 #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)173 /* заданные по умолчанию разрешения на доступ для новых файлов */174 #define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)175 /* разрешения по умолчанию на доступ к файлам для новых каталогов */176 typedef void Sigfunc(int); /* для обработчиков сигналов */177 #define min(a, b) ((а) < (b) ? (a) : (b))178 #define max(a, b) ((a) > (b) ? (a) : (b))179 #ifndef HAVE_ADDRINFO_STRUCT180 #include "../lib/addrinfo.h"181 #endif182 #ifndef HAVE_IF_NAMEINDEX_STRUCT183 struct if_nameindex {184 unsigned int if_index; /* 1, 2, ... */185 char *if_name; /* имя, заканчивающееся нулем: "le0", ... */186 };187 #endif188 #ifndef HAVE_TIMESPEC_STRUCT189 struct timespec {190 time_t tv_sec; /* секунды */191 long tv_nsec; /* и наносекунды */192 };193 #endifГ.2. Заголовочный файл config.h
Для обеспечения переносимости всего исходного кода, используемого в тексте книги, применялась утилита GNU
. Ее можно загрузить по адресуautoconf. Эта программа генерирует сценарий интерпретатора с названием configure, который надо запустить после загрузки программного обеспечения в свою систему. Этот сценарий определяет, какие свойства обеспечивает ваша система Unix: имеется ли в структуре адреса сокета поле длины, поддерживается ли многоадресная передача, поддерживаются ли структуры адреса сокета канального уровня, и т.д. В результате получается файл с названиемhttp://ftp.gnu.org/gnu/autoconf. Этот файл — первый заголовочный файл, включенный вconfig.h(см. предыдущий раздел). В листинге Г.2 показан заголовочный файлunp.hдля BSD/OS 3.0.config.hСтроки, начинающиеся с
, относятся к тем свойствам, которые обеспечены данной системой. Закомментированные строки и строки, начинающиеся с#define, относятся к свойствам, данной системой не поддерживаемым.#undefЛистинг Г.2. Заголовочный файл config.h для BSD/OS
i386-pc-bsdi3.0/config.h1 /* config.h. Автоматически генерируется сценарием configure. */2 /* Определяем константы, если имеется соответствующий заголовочный файл */3 #define CPU_VENDOR_OS "i386-pc-bsdi3.0"4 /* #undef HAVE_NETCONFIG_H */ /* <netconfig.h> */5 /* #undef HAVE_NETDIR_H */ /* <netdir.h> */6 #define HAVE_PTHREAD_H 1 /* <pthread.h> */7 #define HAVE_STRINGS_H 1 /* <strings.h> */8 /* #undef HAVE_XTI_INET_H */ /* <xti_inet.h> */9 #define HAVE_SYS_FILIO_H 1 /* <sys/filio.h> */10 #define HAVE_SYS_IOCTL_H 1 /* <sys/ioctl.h> */11 #define HAVE_SYS_SELECT_H 1 /* <sys/select.h> */12 #define HAVE_SYS_SOCKIO_H 1 /* <sys/sockio.h> */13 #define HAVE_SYS_SYSCTL_H 1 /* <sys/sysctl.h> */14 #define HAVE_SYS_TIME_H 1 /* <sys/time.h> */15 /* Определена, если можно подключить <time.h> и <sys/time.h> */16 #define TIME_WITH_SYS_TIME 117 /* Определены, если имеются соответствующие функции */18 #define HAVE_BZERO 119 #define HAVE_GETHOSTBYNAME2 120 /* #undef HAVE_PSELECT */21 #define HAVE_VSNPRINTF 122 /* Определены, если прототипы функций есть в заголовочном файле */23 /* #undef HAVE_GETADDRINFO_PROTO */ /* <netdb.h> */24 /* #undef HAVE_GETNAMEINFO_PROTO */ /* <netdb.h> */25 #define HAVE_GETHOSTNAME_PROTO 1 /* <unistd.h> */26 #define HAVE_GETRUSAGE_PROTO 1 /* <sys/resource.h> */27 #define HAVE_HSTRERROR_PROTO 1 /* <netdb.h> */28 /* #undef HAVE_IF_NAMETOINDEX_PROTO */ /* <net/if.h> */29 #define HAVE_INET_ATON_PROTO 1 /* <arpa/inet.h> */