unp.h文件内容
来源:互联网 发布:java打包没有lib文件 编辑:程序博客网 时间:2024/05/24 06:55
1 /* Our own header. Tabs are set for 4 spaces, not 8 */ 2 #ifndef __unp_h 3 #define __unp_h 4 #include "../config.h" /* configuration options for current OS */ 5 /* "../config.h" is generated by configure */ 6 /* If anything changes in the following list of #includes, must change 7 acsite.m4 also, for configure's tests. */ 8 #include <sys/types.h> /* basic system data types */ 9 #include <sys/socket.h> /* basic socket definitions */ 10 #include <sys/time.h> /* timeval{} for select() */ 11 #include <time.h> /* timespec{} for pselect() */ 12 #include <netinet/in.h> /* sockaddr_in{} and other Internet defns */ 13 #include <arpa/inet.h> /* inet(3) functions */ 14 #include <errno.h> 15 #include <fcntl.h> /* for nonblocking */ 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> /* for S_xxx file mode constants */ 22 #include <sys/uio.h> /* for iovec{} and readv/writev */ 23 #include <unistd.h> 24 #include <sys/wait.h> 25 #include <sys/un.h> /* for Unix domain sockets */ 26 #ifdef HAVE_SYS_SELECT_H 27 # include <sys/select.h> /* for convenience */ 28 #endif 29 #ifdef HAVE_SYS_SYSCTL_H 30 # include <sys/sysctl.h> 31 #endif 32 #ifdef HAVE_POLL_H 33 # include <poll.h> /* for convenience */ 34 #endif 35 #ifdef HAVE_SYS_EVENT_H 36 # include <sys/event.h> /* for kqueue */ 37 #endif 38 #ifdef HAVE_STRINGS_H 39 # include <strings.h> /* for convenience */ 40 #endif 41 /* Three headers are normally needed for socket/file ioctl's: 42 * <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>. 43 */ 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 actually disables recv() and send() in <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 /* should have been in <netinet/in.h> */ 71 #endif 72 #ifndef SHUT_RD /* these three POSIX names are new */ 73 #define SHUT_RD 0 /* shutdown for reading */ 74 #define SHUT_WR 1 /* shutdown for writing */ 75 #define SHUT_RDWR 2 /* shutdown for reading and writing */ 76 #endif 77 #ifndef INET_ADDRSTRLEN 78 #define INET_ADDRSTRLEN 16 /* "ddd.ddd.ddd.ddd\0" 79 1234567890123456 */ 80 #endif 81 /* Define following even if IPv6 not supported, so we can always allocate 82 an adequately sized buffer without #ifdefs in the code. */ 83 #ifndef INET6_ADDRSTRLEN 84 #define INET6_ADDRSTRLEN 46 /* max size of IPv6 address string: 85 "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" or 86 "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0" 87 1234567890123456789012345678901234567890123456 */ 88 #endif 89 /* Define bzero() as a macro if it's not in standard C library. */ 90 #ifndef HAVE_BZERO 91 #define bzero(ptr,n) memset (ptr, 0, n) 92 #endif 93 /* Older resolvers do not have gethostbyname2() */ 94 #ifndef HAVE_GETHOSTBYNAME2 95 #define gethostbyname2(host,family) gethostbyname((host)) 96 #endif 97 /* The structure returned by recvfrom_flags() */ 98 struct unp_in_pktinfo { 99 struct in_addr ipi_addr; /* dst IPv4 address */100 int ipi_ifindex; /* received interface index */101 };102 /* We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few103 implementations support them today. These two macros really need104 an ALIGN() macro, but each implementation does this differently. */105 #ifndef CMSG_LEN106 #define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size))107 #endif108 #ifndef CMSG_SPACE109 #define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size))110 #endif111 /* POSIX requires the SUN_LEN() macro, but not all implementations define112 it (yet). Note that this 4.4BSD macro works regardless whether there is113 a length field or not. */114 #ifndef SUN_LEN115 # define SUN_LEN (su) \116 (sizeof (*(su)) - sizeof ((su)->sun_path) + strlen((su)->sun_path))117 #endif118 /* POSIX renames "Unix domain" as "local IPC."119 Not all systems define AF_LOCAL and PF_LOCAL (yet). */120 #ifndef AF_LOCAL121 #define AF_LOCAL AF_UNIX122 #endif123 #ifndef PF_LOCAL124 #define PF_LOCAL PF_UNIX125 #endif126 /* POSIX requires that an #include of <poll.h> define INFTIM, but many127 systems still define it in <sys/stropts.h>. We don't want to include128 all the STREAMS stuff if it's not needed, so we just define INFTIM here.129 This is the standard value, but there's no guarantee it is -1. */130 #ifndef INFTIM131 #define INFTIM (-1) /* infinite poll timeout */132 #ifdef HAVE_POLL_H133 #define INFTIM_UNPH /* tell unpxti.h we defined it */134 #endif135 #endif136 /* Following could be derived from SOMAXCONN in <sys/socket.h>, but many137 kernels still #define it as 5, while actually supporting many more */138 #define LISTENQ 1024 /* 2nd argument to listen () */139 /* Miscellaneous constants */140 #define MAXLINE 4096 /* max text line length */141 #define BUFFSIZE 8192 /* buffer size for reads and writes */142 /* Define some port number that can be used for our examples */143 #define SERV_PORT 9877 /* TCP and UDP */144 #define SERV_PORT_STR "9877" /* TCP and UDP */145 #define UNIXSTR_PATH "/tmp/unix.str" /* Unix domain stream */146 #define UNIXDG_PATH "/tmp/unix.dg" /* Unix domain datagram */147 /* Following shortens all the typecasts of pointer arguments: */148 #define SA struct sockaddr149 #define HAVE_STRUCT_SOCKADDR_STORAGE150 #ifndef HAVE_STRUCT_SOCKADDR_STORAGE151 /*152 * RFC 3493: protocol-independent placeholder for socket addresses153 */154 #define __SS_MAXSIZE 128155 #define __SS_ALIGNSIZE (sizeof(int64_t))156 #ifdef HAVE_SOCKADDR_SA_LEN157 #define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(u_char) - 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 /* default file access permissions for new files */174 #define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)175 /* default permissions for new directories */176 typedef void Sigfunc (int); /* for signal handlers */177 #define min(a,b) ((a) < (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; /* null-terminated name: "le0", ... */186 };187 #endif188 #ifndef HAVE_TIMESPEC_STRUCT189 struct timespec {190 time_t tv_sec; /* seconds */191 long tv_nsec; /* and nanoseconds */192 };193 #endif