Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

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> */

  • Читать дальше
  • 1
  • ...
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: