UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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
autoconfhttp://ftp.gnu.org/gnu/autoconfconfig.hunp.hconfig.hСтроки, начинающиеся с
#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> */ 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> */
