Чтение онлайн

ЖАНРЫ

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, что эта константа

Поделиться с друзьями: