/* include unph lib/unp.h*/
/* Our own header. Tabs are set for 4 spaces, not 8 */
#ifndef __unp_h
#define __unp_h
#include "../config.h" /* configuration options for current OS */
/* "../config.h" is generated by configure */
/* If anything changes in the following list of #includes, must change
acsite.m4 also, for configure's tests. */
#include /* basic system data types */
#include /* basic socket definitions */
#if TIME_WITH_SYS_TIME
#include /* timeval{} for select() */
#include /* timespec{} for pselect() */
#else
#if HAVE_SYS_TIME_H
#include /* includes unsafely */
#else
#include /* old system? */
#endif
#endif
#include /* sockaddr_in{} and other Internet defns */
#include /* inet(3) functions */
#include
#include /* for nonblocking */
#include
#include
#include
#include
#include
#include /* for S_xxx file mode constants */
#include /* for iovec{} and readv/writev */
#include
#include
#include /* for Unix domain sockets */
#ifdef HAVE_SYS_SELECT_H
# include /* for convenience */
#endif
#ifdef HAVE_SYS_SYSCTL_H
#ifdef HAVE_SYS_PARAM_H
# include /* OpenBSD prereq for sysctl.h */
#endif
# include
#endif
#ifdef HAVE_POLL_H
# include /* for convenience */
#endif
#ifdef HAVE_SYS_EVENT_H
# include /* for kqueue */
#endif
#ifdef HAVE_STRINGS_H
# include /* for convenience */
#endif
/* Three headers are normally needed for socket/file ioctl's:
* , , and .
*/
#ifdef HAVE_SYS_IOCTL_H
# include
#endif
#ifdef HAVE_SYS_FILIO_H
# include
#endif
#ifdef HAVE_SYS_SOCKIO_H
# include
#endif
#ifdef HAVE_PTHREAD_H
# include
#endif
#ifdef HAVE_NET_IF_DL_H
# include
#endif
#ifdef HAVE_NETINET_SCTP_H
#include
#endif
/* OSF/1 actually disables recv() and send() in */
#ifdef __osf__
#undef recv
#undef send
#define recv(a,b,c,d) recvfrom(a,b,c,d,0,0)
#define send(a,b,c,d) sendto(a,b,c,d,0,0)
#endif
#ifndef INADDR_NONE
/* $$.Ic INADDR_NONE$$ */
#define INADDR_NONE 0xffffffff /* should have been in */
#endif
#ifndef SHUT_RD /* these three POSIX names are new */
#define SHUT_RD 0 /* shutdown for reading */
#define SHUT_WR 1 /* shutdown for writing */
#define SHUT_RDWR 2 /* shutdown for reading and writing */
/* $$.Ic SHUT_RD$$ */
/* $$.Ic SHUT_WR$$ */
/* $$.Ic SHUT_RDWR$$ */
#endif
/* *INDENT-OFF* */
#ifndef INET_ADDRSTRLEN
/* $$.Ic INET_ADDRSTRLEN$$ */
#define INET_ADDRSTRLEN 16 /* "ddd.ddd.ddd.ddd\0"
1234567890123456 */
#endif
/* Define following even if IPv6 not supported, so we can always allocate
an adequately sized buffer without #ifdefs in the code. */
#ifndef INET6_ADDRSTRLEN
/* $$.Ic INET6_ADDRSTRLEN$$ */
#define INET6_ADDRSTRLEN 46 /* max size of IPv6 address string:
"xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" or
"xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0"
1234567890123456789012345678901234567890123456 */
#endif
/* *INDENT-ON* */
/* Define bzero() as a macro if it's not in standard C library. */
#ifndef HAVE_BZERO
#define bzero(ptr,n) memset(ptr, 0, n)
/* $$.If bzero$$ */
/* $$.If memset$$ */
#endif
/* Older resolvers do not have gethostbyname2() */
#ifndef HAVE_GETHOSTBYNAME2
#define gethostbyname2(host,family) gethostbyname((host))
#endif
/* The structure returned by recvfrom_flags() */
struct unp_in_pktinfo {
struct in_addr ipi_addr; /* dst IPv4 address */
int ipi_ifindex;/* received interface index */
};
/* $$.It unp_in_pktinfo$$ */
/* $$.Ib ipi_addr$$ */
/* $$.Ib ipi_ifindex$$ */
/* We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few
implementations support them today. These two macros really need
an ALIGN() macro, but each implementation does this differently. */
#ifndef CMSG_LEN
/* $$.Im CMSG_LEN$$ */
#define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size))
#endif
#ifndef CMSG_SPACE
/* $$.Im CMSG_SPACE$$ */
#define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size))
#endif
/* POSIX requires the SUN_LEN() macro, but not all implementations DefinE
it (yet). Note that this 4.4BSD macro works regardless whether there is
a length field or not. */
#ifndef SUN_LEN
/* $$.Im SUN_LEN$$ */
# define SUN_LEN(su) \
(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
#endif
/* POSIX renames "Unix domain" as "local IPC."
Not all systems DefinE AF_LOCAL and PF_LOCAL (yet). */
#ifndef AF_LOCAL
#define AF_LOCAL AF_UNIX
#endif
#ifndef PF_LOCAL
#define PF_LOCAL PF_UNIX
#endif
/* POSIX requires that an #include of DefinE INFTIM, but many
systems still DefinE it in . We don't want to include
all the STREAMS stuff if it's not needed, so we just DefinE INFTIM here.
This is the standard value, but there's no guarantee it is -1. */
#ifndef INFTIM
#define INFTIM (-1) /* infinite poll timeout */
/* $$.Ic INFTIM$$ */
#ifdef HAVE_POLL_H
#define INFTIM_UNPH /* tell unpxti.h we defined it */
#endif
#endif
/* Following could be derived from SOMAXCONN in , but many
kernels still #define it as 5, while actually supporting many more */
#define LISTENQ 1024 /* 2nd argument to listen() */
/* Miscellaneous constants */
#define MAXLINE 4096 /* max text line length */
#define BUFFSIZE 8192 /* buffer size for reads and writes */
/* Define some port number that can be used for our examples */
#define SERV_PORT 9877 /* TCP and UDP */
#define SERV_PORT_STR "9877" /* TCP and UDP */
#define UNIXSTR_PATH "/tmp/unix.str" /* Unix domain stream */
#define UNIXDG_PATH "/tmp/unix.dg" /* Unix domain datagram */
/* $$.ix [LISTENQ]~constant,~definition~of$$ */
/* $$.ix [MAXLINE]~constant,~definition~of$$ */
/* $$.ix [BUFFSIZE]~constant,~definition~of$$ */
/* $$.ix [SERV_PORT]~constant,~definition~of$$ */
/* $$.ix [UNIXSTR_PATH]~constant,~definition~of$$ */
/* $$.ix [UNIXDG_PATH]~constant,~definition~of$$ */
/* Following shortens all the typecasts of pointer arguments: */
#define SA struct sockaddr
#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
/*
* RFC 3493: protocol-independent placeholder for socket addresses
*/
#define __SS_MAXSIZE 128
#define __SS_ALIGNSIZE (sizeof(int64_t))
#ifdef HAVE_SOCKADDR_SA_LEN
#define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(u_char) - sizeof(sa_family_t))
#else
#define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(sa_family_t))
#endif
#define __SS_PAD2SIZE (__SS_MAXSIZE - 2*__SS_ALIGNSIZE)
struct sockaddr_storage {
#ifdef HAVE_SOCKADDR_SA_LEN
u_char ss_len;
#endif
sa_family_t ss_family;
char __ss_pad1[__SS_PAD1SIZE];
int64_t __ss_align;
char __ss_pad2[__SS_PAD2SIZE];
};
#endif
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default file access permissions for new files */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directories */
typedef void Sigfunc(int); /* for signal handlers */
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
#ifndef HAVE_ADDRINFO_STRUCT
# include "../lib/addrinfo.h"
#endif
#ifndef HAVE_IF_NAMEINDEX_STRUCT
struct if_nameindex {
unsigned int if_index; /* 1, 2, ... */
char *if_name; /* null-terminated name: "le0", ... */
};
/* $$.It if_nameindex$$ */
/* $$.Ib if_index$$ */
/* $$.Ib if_name$$ */
#endif
#ifndef HAVE_TIMESPEC_STRUCT
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* and nanoseconds */
};
/* $$.It timespec$$ */
/* $$.Ib tv_sec$$ */
/* $$.Ib tv_nsec$$ */
#endif
/* end unph */
/* prototypes for our own library functions */
int connect_nonb(int, const SA *, socklen_t, int);
int connect_timeo(int, const SA *, socklen_t, int);
int daemon_init(const char *, int);
void daemon_inetd(const char *, int);
void dg_cli(FILE *, int, const SA *, socklen_t);
void dg_echo(int, SA *, socklen_t);
int family_to_level(int);
char *gf_time(void);
void heartbeat_cli(int, int, int);
void heartbeat_serv(int, int, int);
struct addrinfo *host_serv(const char *, const char *, int, int);
int inet_srcrt_add(char *);
u_char *inet_srcrt_init(int);
void inet_srcrt_print(u_char *, int);
void inet6_srcrt_print(void *);
char **my_addrs(int *);
int readable_timeo(int, int);
ssize_t readline(int, void *, size_t);
ssize_t readn(int, void *, size_t);
ssize_t read_fd(int, void *, size_t, int *);
ssize_t recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *,
struct unp_in_pktinfo *);
Sigfunc *signal_intr(int, Sigfunc *);
int sock_bind_wild(int, int);
int sock_cmp_addr(const SA *, const SA *, socklen_t);
int sock_cmp_port(const SA *, const SA *, socklen_t);
int sock_get_port(const SA *, socklen_t);
void sock_set_addr(SA *, socklen_t, const void *);
void sock_set_port(SA *, socklen_t, int);
void sock_set_wild(SA *, socklen_t);
char *sock_ntop(const SA *, socklen_t);
char *sock_ntop_host(const SA *, socklen_t);
int sockfd_to_family(int);
void str_echo(int);
void str_cli(FILE *, int);
int tcp_connect(const char *, const char *);
int tcp_listen(const char *, const char *, socklen_t *);
void tv_sub(struct timeval *, struct timeval *);
int udp_client(const char *, const char *, SA **, socklen_t *);
int udp_connect(const char *, const char *);
int udp_server(const char *, const char *, socklen_t *);
int writable_timeo(int, int);
ssize_t writen(int, const void *, size_t);
ssize_t write_fd(int, void *, size_t, int);
#ifdef MCAST
int mcast_leave(int, const SA *, socklen_t);
int mcast_join(int, const SA *, socklen_t, const char *, u_int);
int mcast_leave_source_group(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen);
int mcast_join_source_group(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen,
const char *ifname, u_int ifindex);
int mcast_block_source(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen);
int mcast_unblock_source(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen);
int mcast_get_if(int);
int mcast_get_loop(int);
int mcast_get_ttl(int);
int mcast_set_if(int, const char *, u_int);
int mcast_set_loop(int, int);
int mcast_set_ttl(int, int);
void Mcast_leave(int, const SA *, socklen_t);
void Mcast_join(int, const SA *, socklen_t, const char *, u_int);
void Mcast_leave_source_group(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen);
void Mcast_join_source_group(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen,
const char *ifname, u_int ifindex);
void Mcast_block_source(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen);
void Mcast_unblock_source(int sockfd, const SA *src, socklen_t srclen,
const SA *grp, socklen_t grplen);
int Mcast_get_if(int);
int Mcast_get_loop(int);
int Mcast_get_ttl(int);
void Mcast_set_if(int, const char *, u_int);
void Mcast_set_loop(int, int);
void Mcast_set_ttl(int, int);
#endif
uint16_t in_cksum(uint16_t *, int);
#ifndef HAVE_GETADDRINFO_PROTO
int getaddrinfo(const char *, const char *, const struct addrinfo *,
struct addrinfo **);
void freeaddrinfo(struct addrinfo *);
char *gai_strerror(int);
#endif
#ifndef HAVE_GETNAMEINFO_PROTO
int getnameinfo(const SA *, socklen_t, char *, size_t, char *, size_t, int);
#endif
#ifndef HAVE_GETHOSTNAME_PROTO
int gethostname(char *, int);
#endif
#ifndef HAVE_HSTRERROR_PROTO
const char *hstrerror(int);
#endif
#ifndef HAVE_IF_NAMETOINDEX_PROTO
unsigned int if_nametoindex(const char *);
char *if_indextoname(unsigned int, char *);
void if_freenameindex(struct if_nameindex *);
struct if_nameindex *if_nameindex(void);
#endif
#ifndef HAVE_INET_PTON_PROTO
int inet_pton(int, const char *, void *);
const char *inet_ntop(int, const void *, char *, size_t);
#endif
#ifndef HAVE_INET_ATON_PROTO
int inet_aton(const char *, struct in_addr *);
#endif
#ifndef HAVE_PSELECT_PROTO
int pselect(int, fd_set *, fd_set *, fd_set *,
const struct timespec *, const sigset_t *);
#endif
#ifndef HAVE_SOCKATMARK_PROTO
int sockatmark(int);
#endif
#ifndef HAVE_SNPRINTF_PROTO
int snprintf(char *, size_t, const char *, ...);
#endif
/* prototypes for our own library wrapper functions */
void Connect_timeo(int, const SA *, socklen_t, int);
int Family_to_level(int);
struct addrinfo *Host_serv(const char *, const char *, int, int);
const char *Inet_ntop(int, const void *, char *, size_t);
void Inet_pton(int, const char *, void *);
char *If_indextoname(unsigned int, char *);
unsigned int If_nametoindex(const char *);
struct if_nameindex *If_nameindex(void);
char **My_addrs(int *);
ssize_t Read_fd(int, void *, size_t, int *);
int Readable_timeo(int, int);
ssize_t Recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *,
struct unp_in_pktinfo *);
Sigfunc *Signal(int, Sigfunc *);
Sigfunc *Signal_intr(int, Sigfunc *);
int Sock_bind_wild(int, int);
char *Sock_ntop(const SA *, socklen_t);
char *Sock_ntop_host(const SA *, socklen_t);
int Sockfd_to_family(int);
int Tcp_connect(const char *, const char *);
int Tcp_listen(const char *, const char *, socklen_t *);
int Udp_client(const char *, const char *, SA **, socklen_t *);
int Udp_connect(const char *, const char *);
int Udp_server(const char *, const char *, socklen_t *);
ssize_t Write_fd(int, void *, size_t, int);
int Writable_timeo(int, int);
/* prototypes for our Unix wrapper functions: see {Sec errors} */
void *Calloc(size_t, size_t);
void Close(int);
void Dup2(int, int);
int Fcntl(int, int, int);
void Gettimeofday(struct timeval *, void *);
int Ioctl(int, int, void *);
pid_t Fork(void);
void *Malloc(size_t);
int Mkstemp(char *);
void *Mmap(void *, size_t, int, int, int, off_t);
int Open(const char *, int, mode_t);
void Pipe(int *fds);
ssize_t Read(int, void *, size_t);
void Sigaddset(sigset_t *, int);
void Sigdelset(sigset_t *, int);
void Sigemptyset(sigset_t *);
void Sigfillset(sigset_t *);
int Sigismember(const sigset_t *, int);
void Sigpending(sigset_t *);
void Sigprocmask(int, const sigset_t *, sigset_t *);
char *Strdup(const char *);
long Sysconf(int);
void Sysctl(int *, u_int, void *, size_t *, void *, size_t);
void Unlink(const char *);
pid_t Wait(int *);
pid_t Waitpid(pid_t, int *, int);
void Write(int, void *, size_t);
/* prototypes for our stdio wrapper functions: see {Sec errors} */
void Fclose(FILE *);
FILE *Fdopen(int, const char *);
char *Fgets(char *, int, FILE *);
FILE *Fopen(const char *, const char *);
void Fputs(const char *, FILE *);
/* prototypes for our socket wrapper functions: see {Sec errors} */
int Accept(int, SA *, socklen_t *);
void Bind(int, const SA *, socklen_t);
void Connect(int, const SA *, socklen_t);
void Getpeername(int, SA *, socklen_t *);
void Getsockname(int, SA *, socklen_t *);
void Getsockopt(int, int, int, void *, socklen_t *);
#ifdef HAVE_INET6_RTH_INIT
int Inet6_rth_space(int, int);
void *Inet6_rth_init(void *, socklen_t, int, int);
void Inet6_rth_add(void *, const struct in6_addr *);
void Inet6_rth_reverse(const void *, void *);
int Inet6_rth_segments(const void *);
struct in6_addr *Inet6_rth_getaddr(const void *, int);
#endif
#ifdef HAVE_KQUEUE
int Kqueue(void);
int Kevent(int, const struct kevent *, int,
struct kevent *, int, const struct timespec *);
#endif
void Listen(int, int);
#ifdef HAVE_POLL
int Poll(struct pollfd *, unsigned long, int);
#endif
ssize_t Readline(int, void *, size_t);
ssize_t Readn(int, void *, size_t);
ssize_t Recv(int, void *, size_t, int);
ssize_t Recvfrom(int, void *, size_t, int, SA *, socklen_t *);
ssize_t Recvmsg(int, struct msghdr *, int);
int Select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
void Send(int, const void *, size_t, int);
void Sendto(int, const void *, size_t, int, const SA *, socklen_t);
void Sendmsg(int, const struct msghdr *, int);
void Setsockopt(int, int, int, const void *, socklen_t);
void Shutdown(int, int);
int Sockatmark(int);
int Socket(int, int, int);
void Socketpair(int, int, int, int *);
void Writen(int, void *, size_t);
void err_dump(const char *, ...);
void err_msg(const char *, ...);
void err_quit(const char *, ...);
void err_ret(const char *, ...);
void err_sys(const char *, ...);
#endif /* __unp_h */
上述头文件中包含了#include "../config.h"由configure命令生成:
/* config.h. Generated by configure. */
/* config.h.in. Generated from configure.in by autoheader. */
/* CPU, vendor, and operating system */
#define CPU_VENDOR_OS "x86_64-unknown-linux-gnu"
/* Define to 1 if defines struct addrinfo */
#define HAVE_ADDRINFO_STRUCT 1
/* Define to 1 if you have the header file. */
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the `bzero' function. */
#define HAVE_BZERO 1
/* Define to 1 if the /dev/streams/xtiso/tcp device exists */
/* #undef HAVE_DEV_STREAMS_XTISO_TCP */
/* Define to 1 if the /dev/tcp device exists */
/* #undef HAVE_DEV_TCP */
/* Define to 1 if the /dev/xti/tcp device exists */
/* #undef HAVE_DEV_XTI_TCP */
/* Define to 1 if you have the header file. */
#define HAVE_ERRNO_H 1
/* Define to 1 if you have the header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the `getaddrinfo' function. */
#define HAVE_GETADDRINFO 1
/* define if getaddrinfo prototype is in */
#define HAVE_GETADDRINFO_PROTO 1
/* Define to 1 if you have the `gethostbyname2' function. */
#define HAVE_GETHOSTBYNAME2 1
/* Define to 1 if you have the `gethostbyname_r' function. */
#define HAVE_GETHOSTBYNAME_R 1
/* Define to 1 if you have the `gethostname' function. */
#define HAVE_GETHOSTNAME 1
/* define if gethostname prototype is in */
#define HAVE_GETHOSTNAME_PROTO 1
/* Define to 1 if you have the `getnameinfo' function. */
#define HAVE_GETNAMEINFO 1
/* define if getnameinfo prototype is in */
#define HAVE_GETNAMEINFO_PROTO 1
/* define if getrusage prototype is in */
#define HAVE_GETRUSAGE_PROTO 1
/* Define to 1 if you have the `hstrerror' function. */
#define HAVE_HSTRERROR 1
/* define if hstrerror prototype is in */
#define HAVE_HSTRERROR_PROTO 1
/* Define to 1 if defines struct if_nameindex */
#define HAVE_IF_NAMEINDEX_STRUCT 1
/* Define to 1 if you have the `if_nametoindex' function. */
#define HAVE_IF_NAMETOINDEX 1
/* define if if_nametoindex prototype is in */
#define HAVE_IF_NAMETOINDEX_PROTO 1
/* Define to 1 if you have the `inet6_rth_init' function. */
#define HAVE_INET6_RTH_INIT 1
/* Define to 1 if you have the `inet_aton' function. */
#define HAVE_INET_ATON 1
/* define if inet_aton prototype is in */
#define HAVE_INET_ATON_PROTO 1
/* Define to 1 if you have the `inet_pton' function. */
#define HAVE_INET_PTON 1
/* define if inet_pton prototype is in */
#define HAVE_INET_PTON_PROTO 1
/* Define to 1 if you have the `kevent' function. */
/* #undef HAVE_KEVENT */
/* Define to 1 if you have the `kqueue' function. */
/* #undef HAVE_KQUEUE */
/* Define to 1 if you have the `nsl' library (-lnsl). */
/* #undef HAVE_LIBNSL */
/* Define to 1 if you have the `pthread' library (-lpthread). */
#define HAVE_LIBPTHREAD 1
/* Define to 1 if you have the `pthreads' library (-lpthreads). */
/* #undef HAVE_LIBPTHREADS */
/* Define to 1 if you have the `resolv' library (-lresolv). */
/* #undef HAVE_LIBRESOLV */
/* Define to 1 if you have the `xti' library (-lxti). */
/* #undef HAVE_LIBXTI */
/* Define to 1 if you have the `mkstemp' function. */
#define HAVE_MKSTEMP 1
/* define if struct msghdr contains the msg_control member */
#define HAVE_MSGHDR_MSG_CONTROL 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_NETCONFIG_H */
/* Define to 1 if you have the header file. */
#define HAVE_NETDB_H 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_NETDIR_H */
/* Define to 1 if you have the header file. */
#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_NET_IF_DL_H */
/* Define to 1 if you have the `poll' function. */
#define HAVE_POLL 1
/* Define to 1 if you have the header file. */
#define HAVE_POLL_H 1
/* Define to 1 if you have the `pselect' function. */
#define HAVE_PSELECT 1
/* define if pselect prototype is in */
#define HAVE_PSELECT_PROTO 1
/* Define to 1 if you have the header file. */
#define HAVE_PTHREAD_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SIGNAL_H 1
/* Define to 1 if you have the `snprintf' function. */
#define HAVE_SNPRINTF 1
/* define if snprintf prototype is in */
#define HAVE_SNPRINTF_PROTO 1
/* Define to 1 if defines struct sockaddr_dl */
/* #undef HAVE_SOCKADDR_DL_STRUCT */
/* define if socket address structures have length fields */
/* #undef HAVE_SOCKADDR_SA_LEN */
/* Define to 1 if you have the `sockatmark' function. */
#define HAVE_SOCKATMARK 1
/* define if sockatmark prototype is in */
#define HAVE_SOCKATMARK_PROTO 1
/* Define to 1 if you have the header file. */
#define HAVE_STDIO_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STROPTS_H 1
/* Define to 1 if `ifr_mtu' is member of `struct ifreq'. */
#define HAVE_STRUCT_IFREQ_IFR_MTU 1
/* Define to 1 if the system has the type `struct sockaddr_storage'. */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_SYS_EVENT_H */
/* Define to 1 if you have the header file. */
/* #undef HAVE_SYS_FILIO_H */
/* Define to 1 if you have the header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_SYS_SOCKIO_H */
/* Define to 1 if you have the header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_SYSCTL_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_UIO_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_UN_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_WAIT_H 1
/* Define to 1 if or defines struct timespec */
#define HAVE_TIMESPEC_STRUCT 1
/* Define to 1 if you have the header file. */
#define HAVE_TIME_H 1
/* Define to 1 if you have the header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `vsnprintf' function. */
#define HAVE_VSNPRINTF 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_XTI_H */
/* Define to 1 if you have the header file. */
/* #undef HAVE_XTI_INET_H */
/* Define to 1 if the system supports IPv4 */
#define IPV4 1
/* Define to 1 if the system supports IPv6 */
#define IPV6 1
/* Define to 1 if the system supports IPv4 */
#define IPv4 1
/* Define to 1 if the system supports IPv6 */
#define IPv6 1
/* Define to 1 if the system supports IP Multicast */
#define MCAST 1
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""
/* Define to the full name of this package. */
#define PACKAGE_NAME ""
/* Define to the full name and version of this package. */
#define PACKAGE_STRING ""
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME ""
/* Define to the version of this package. */
#define PACKAGE_VERSION ""
/* the size of the sa_family field in a socket address structure */
/* #undef SA_FAMILY_T */
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to 1 if you can safely include both and . */
#define TIME_WITH_SYS_TIME 1
/* Define to 1 if the system supports UNIX domain sockets */
#define UNIXDOMAIN 1
/* Define to 1 if the system supports UNIX domain sockets */
#define UNIXdomain 1
/* 16 bit signed type */
/* #undef int16_t */
/* 32 bit signed type */
/* #undef int32_t */
/* the type of the sa_family struct member */
/* #undef sa_family_t */
/* unsigned integer type of the result of the sizeof operator */
/* #undef size_t */
/* a type appropriate for address */
/* #undef socklen_t */
/* define to __ss_family if sockaddr_storage has that instead of ss_family */
/* #undef ss_family */
/* a signed type appropriate for a count of bytes or an error indication */
/* #undef ssize_t */
/* scalar type */
#define t_scalar_t int32_t
/* unsigned scalar type */
/* #undef t_uscalar_t */
/* 16 bit unsigned type */
/* #undef uint16_t */
/* 32 bit unsigned type */
/* #undef uint32_t */
/* 8-bit unsigned type */
/* #undef uint8_t */
unp.h头文件还包含了# include "../lib/addrinfo.h"
#ifndef __addrinfo_h
#define __addrinfo_h
/*
* Everything here really belongs in .
* These defines are separate for now, to avoid having to modify the
* system's header.
*/
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* IPPROTO_xxx for IPv4 and IPv6 */
size_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for host */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
/* following for getaddrinfo() */
#define AI_PASSIVE 1 /* socket is intended for bind() + listen() */
#define AI_CANONNAME 2 /* return canonical name */
/* following for getnameinfo() */
#define NI_MAXHOST 1025 /* max hostname returned */
#define NI_MAXSERV 32 /* max service name returned */
#define NI_NOFQDN 1 /* do not return FQDN */
#define NI_NUMERICHOST 2 /* return numeric form of hostname */
#define NI_NAMEREQD 4 /* return error if hostname not found */
#define NI_NUMERICSERV 8 /* return numeric form of service name */
#define NI_DGRAM 16 /* datagram service for getservbyname() */
/* error returns */
#define EAI_ADDRFAMILY 1 /* address family for host not supported */
#define EAI_AGAIN 2 /* temporary failure in name resolution */
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
#define EAI_FAMILY 5 /* ai_family not supported */
#define EAI_MEMORY 6 /* memory allocation failure */
#define EAI_NODATA 7 /* no address associated with host */
#define EAI_NONAME 8 /* host nor service provided, or not known */
#define EAI_SERVICE 9 /* service not supported for ai_socktype */
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
#define EAI_SYSTEM 11 /* system error returned in errno */
#endif /* __addrinfo_h */