UNIX: разработка сетевых приложений
Шрифт:
143 #define SERV_PORT 9877 /* клиенты и серверы TCP и UDP */
144 #define SERV_PORT_STR "9877" /* клиенты и серверы TCP и UDP */
145 #define UNIXSTR_PATH "/tmp/unix.str" /* потоковые клиенты и серверы
домена Unix */
146 #define UNIXDG_PATH "/tmp/unix.dg" /* клиенты и серверы протокола
дейтаграмм домена Unix */
147 /* Дальнейшие определения
сокращают преобразования типов
аргументов-указателей */
148 #define SA struct sockaddr
149 #define HAVE_STRUCT_SOCKADDR_STORAGE
150 #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
151 /*
152 * RFC 3493: протокольно-независимая структура адреса сокета
153 */
154 #define __SS_MAXSIZE 128
155 #define __SS_ALIGNSIZE (sizeof(int64_t))
156 #ifndef HAVE_SOCKADDR_SA_LEN
157 #define __SS_PADS1SIZE (__SS_ALIGNSIZE - sizeof(u_char) -
sizeof(sa_family_t))
158 #else
159 #define _SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(sa_family_t))
160 #endif
161 #define __SS_PAD2SIZE (__SS_MAXSIZE — 2*__SS_ALIGNSIZE)
162 struct sockaddr_storage {
163 #ifdef HAVE_SOCKADDR_SA_LEN
164 u_char ss_len;
165 #endif
166 sa_family_t ss_family;
167 char __ss_pad1[__SS_PAD1SIZE];
168 int64_t ss_align;
169 char __ss_pad2[_SS_PAD2SIZE];
170 };
171 #endif
172 #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_STRUCT
180 #include "../lib/addrinfo.h"
181 #endif
182 #ifndef HAVE_IF_NAMEINDEX_STRUCT
183 struct if_nameindex {
184 unsigned int if_index; /* 1, 2, ... */
185 char *if_name; /*
имя, заканчивающееся нулем: "le0", ... */
186 };
187 #endif
188 #ifndef HAVE_TIMESPEC_STRUCT
189 struct timespec {
190 time_t tv_sec; /* секунды */
191 long tv_nsec; /* и наносекунды */
192 };
193 #endif
Г.2. Заголовочный файл config.h
Для обеспечения переносимости всего исходного кода, используемого в тексте книги, применялась утилита GNU
autoconf
. Ее можно загрузить по адресу http://ftp.gnu.org/gnu/autoconf
. Эта программа генерирует сценарий интерпретатора с названием configure, который надо запустить после загрузки программного обеспечения в свою систему. Этот сценарий определяет, какие свойства обеспечивает ваша система Unix: имеется ли в структуре адреса сокета поле длины, поддерживается ли многоадресная передача, поддерживаются ли структуры адреса сокета канального уровня, и т.д. В результате получается файл с названием config.h
. Этот файл — первый заголовочный файл, включенный в unp.h
(см. предыдущий раздел). В листинге Г.2 показан заголовочный файл config.h
для BSD/OS 3.0. Строки, начинающиеся с
#define
, относятся к тем свойствам, которые обеспечены данной системой. Закомментированные строки и строки, начинающиеся с #undef
, относятся к свойствам, данной системой не поддерживаемым. Листинг Г.2. Заголовочный файл config.h для BSD/OS
i386-pc-bsdi3.0/config.h
1 /* 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> */
Поделиться:
Популярные книги
Моя на одну ночь
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Черный Маг Императора 8
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Отбор для предателя
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга II
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Шаг в бездну
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Часовая битва
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Вечная Война. Книга II
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Часовой ключ
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Инвестиго, из медика в маги
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Кротовский, может, хватит?
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Драконий подарок
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Очешуеть! Я - жена дракона?!
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Идеальный мир для Лекаря 9
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00