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\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