UNIX: разработка сетевых приложений
Шрифт:
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\0"
79 1234567890123456 */
80 #endif
81 /* Нужно, даже если нет поддержки IPv6, чтобы мы всегда могли
82 разместить в памяти буфер требуемого размера без директив #ifdef */
83 #ifndef INET6_ADDRSTRLEN
84 #define INET6_ADDRSTRLEN 46 /* максимальная длина строки адреса IPv6:
85 "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" или
86 "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0"
87 1234567890123456789012345678901234567890123456 */
88 #endif
89 /* Определяем bzero как макрос, если эта функция отсутствует в
стандартной библиотеке С */
90 #ifndef HAVE_BZERO
91 #define bzero(ptr,n) memset(ptr, 0, n)
92 #endif
93 /* В более старых распознавателях
отсутствует gethostbyname2 */
94 #ifndef HAVE_GETHOSTBYNAME2
95 #define gethostbyname2(host, family) gethostbyname((host))
96 #endif
97 /* Структура, возвращаемая функцией recvfrom_flags */
98 struct in_pktinfo {
99 struct in_addr ipi_addr; /* IPv4-адрес получателя */
100 int ipi_ifindex; /* полученный индекс интерфейса */
101 };
102 /* Нам нужны более новые макросы CMSG_LEN и CMSG_SPACE, но в
103 настоящее время их поддерживают далеко не все реализации. Им требуется
104 макрос ALIGN, но это зависит от реализации */
105 #ifndef CMSG_LEN
106 #define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size))
107 #endif
108 #ifndef CMSG_SPACE
109 #define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size))
110 #endif
111 /* POSIX требует макрос SUN_LEN, но он определен
112 не во всех реализациях. Этот макрос 4.4BSD работает
123 независимо от того, имеется ли поле длины */
114 #ifndef SUN_LEN
115 #define SUN_LEN(su) \
116 (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
117 #endif
118 /* В POSIX "домен Unix" называется "локальным IPC".
119 Но пока не во всех системах определены AF_LOCAL и PF_LOCAL */
120 #ifndef AF_LOCAL
121 #define AF_LOCAL AF_UNIX
122 #endif
123 #ifndef PF_LOCAL
124 #define PF_LOCAL PF_UNIX
125 #endif
126 /* POSIX требует определения константы INFTIM в <poll.h>, но во многих
127 системах она по-прежнему определяется в <sys/stropts.h>. Чтобы
128 не подключать все функции работы с потоками, определяем ее здесь.
129 Это стандартное значение, но нет гарантии, что оно равно -1 */
130 #ifndef INFTIM
131 #define INFTIM (-1) /* бесконечный тайм-аут */
132 #ifdef HAVE_POLL_H
133 #define INFTIM_UNPH /* надо указать в unpxti.h, что эта константа
Поделиться с друзьями: