UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Листинг Г.1. Заголовочный файл unp.h
//lib/unp.h 1 /* Наш собственный заголовочный файл */ 2 #ifndef __unp_h 3 #define __unp_h 4 #include "../config.h" /* параметры конфигурации для данной ОС */ 5 /* "../config.h" генерируется сценарием configure */ 6 /* изменив список директив #include, 7 нужно также изменить файл acsite.m4 */ 8 #include <sys/types.h> /* основные системные типы данных */ 9 #include <sys/socket.h> /* основные определения сокетов */ 10 #include <sys/time.h> /* структура timeval{} для функции select() */ 11 #include <time.h> /* структура timespec{} для функции pselect() */ 12 #include <netinet/in.h> /* структура sockaddr_in{} и другие сетевые определения */ 13 #include <arpa/inet.h> /* inet(3) функции */ 14 #include <errno.h> 15 #include <fcntl.h> /* для неблокируемых сокетов */ 16 #include <netdb.h> 17 #include <signal.h> 18 #include <stdio.h> 19 #include <stdlib.h> 20 #include <string.h> 21 #include <sys/stat.h> /* для констант S_xxx */ 22 #include <sys/uio.h> /* для структуры iovec{} и ready/writev */ 23 #include <unistd.h> 24 #include <sys/wait.h> 25 #include <sys/un.h> /* для доменных сокетов Unix */ 26 #ifdef HAVE_SYS_SELECT_H 27 #include <sys/select.h> /* для удобства */ 28 #endif 29 #ifdef HAVE_SYS_SYSCTL_H 30 #include <sys/sysctl.h> 31 #endif 32 #ifdef HAVE_POLL_H 33 #include <poll.h> /* для удобства */ 34 #endif 35 #ifdef HAVE_SYS_EVENT_H 36 #include <sys/event.h> /* для kqueue */ 37 #endif 38 #ifdef HAVE_STRINGS_H 39 #include <strings.h> /* для удобства */ 40 #endif 41 /* Три заголовочных файла обычно нужны для вызова ioctl 42 для сокета/файла: <sys/ioctl.h>, <sys/filio.h>, 43 <sys/sockio.h> */ 44 #ifdef HAVE_SYS_IOCTL_H 45 #include <sys/ioctl.h> 46 #endif 47 #ifdef HAVE_SYS_FILIO_H 48 #include <sys/filio.h> 49 #endif 50 #ifdef HAVE_SYS_SOCKIO_H 51 #include <sys/sockio.h> 52 #endif 53 #ifdef HAVE_PTHREAD_H 54 #include <pthread.h> 55 #endif 56 #ifdef HAVE_NET_IF_DL_H 57 #include <net/if_dl.h> 58 #endif 59 #ifdef HAVE_NETINET_SCTP_H 60 #include <netinet/sctp.h> 61 #endif 62 /* OSF/1 фактически запрещает recv() и send() в <sys/socket.h> */ 63 #ifdef __osf__ 64 #undef recv 65 #undef send 66 #define recv(a,b,c,d) recvfrom(a,b,c,d,0,0) 67 #define send(a,b,c,d) sendto(a,b,c,d,0,0) 68 #endif 69 #ifndef INADDR_NONE 70 #define INADDR_NONE 0xffffffff /* должно было быть в <netinet/in.h> */ 71 #endif 72 #ifndef SHUT_RD /* три новые константы Posix.1g */ 73 #define SHUT_RD 0 /* отключение чтения */ 74 #define SHUT_WR 1 /* отключение записи */ 75 #define SHUT_RDWR 2 /* отключение чтения и записи */ 76 #endif 77 #ifndef INET_ADDRSTRLEN 78 #define INET_ADDRSTRLEN 16 /* "ddd.ddd.ddd.ddd " 79 1234567890123456 */ 80 #endif 81 /* Нужно, даже если нет поддержки IPv6, чтобы мы всегда могли 82 разместить в памяти буфер требуемого размера без директив #ifdef */
