http://www.cnblogs.com/blacksword/archive/2012/03/03/2378655.html
先看看这个链接
unp.h

/* include unph */ /* 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 <sys/types.h> /* basic system data types */ #include <sys/socket.h> /* basic socket definitions */ #if TIME_WITH_SYS_TIME #include <sys/time.h> /* timeval{} for select() */ #include <time.h> /* timespec{} for pselect() */ #else #if HAVE_SYS_TIME_H #include <sys/time.h> /* includes <time.h> unsafely */ #else #include <time.h> /* old system? */ #endif #endif #include <netinet/in.h> /* sockaddr_in{} and other Internet defns */ #include <arpa/inet.h> /* inet(3) functions */ #include <errno.h> #include <fcntl.h> /* for nonblocking */ #include <netdb.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> /* for S_xxx file mode constants */ #include <sys/uio.h> /* for iovec{} and readv/writev */ #include <unistd.h> #include <sys/wait.h> #include <sys/un.h> /* for Unix domain sockets */ #ifdef HAVE_SYS_SELECT_H # include <sys/select.h> /* for convenience */ #endif #ifdef HAVE_SYS_SYSCTL_H #ifdef HAVE_SYS_PARAM_H # include <sys/param.h> /* OpenBSD prereq for sysctl.h */ #endif # include <sys/sysctl.h> #endif #ifdef HAVE_POLL_H # include <poll.h> /* for convenience */ #endif #ifdef HAVE_SYS_EVENT_H # include <sys/event.h> /* for kqueue */ #endif #ifdef HAVE_STRINGS_H # include <strings.h> /* for convenience */ #endif /* Three headers are normally needed for socket/file ioctl's: * <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>. */ #ifdef HAVE_SYS_IOCTL_H # include <sys/ioctl.h> #endif #ifdef HAVE_SYS_FILIO_H # include <sys/filio.h> #endif #ifdef HAVE_SYS_SOCKIO_H # include <sys/sockio.h> #endif #ifdef HAVE_PTHREAD_H # include <pthread.h> #endif #ifdef HAVE_NET_IF_DL_H # include <net/if_dl.h> #endif #ifdef HAVE_NETINET_SCTP_H #include <netinet/sctp.h> #endif /* OSF/1 actually disables recv() and send() in <sys/socket.h> */ #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 <netinet/in.h> */ #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 <poll.h> DefinE INFTIM, but many systems still DefinE it in <sys/stropts.h>. 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 <sys/socket.h>, 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 */
config.h

/* config.h. Generated by configure. */ /* config.h.in. Generated from configure.in by autoheader. */ /* CPU, vendor, and operating system */ #define CPU_VENDOR_OS "i686-pc-linux-gnu" /* Define to 1 if <netdb.h> defines struct addrinfo */ #define HAVE_ADDRINFO_STRUCT 1 /* Define to 1 if you have the <arpa/inet.h> 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 <errno.h> header file. */ #define HAVE_ERRNO_H 1 /* Define to 1 if you have the <fcntl.h> 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 <netdb.h> */ #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 <unistd.h> */ #define HAVE_GETHOSTNAME_PROTO 1 /* Define to 1 if you have the `getnameinfo' function. */ #define HAVE_GETNAMEINFO 1 /* define if getnameinfo prototype is in <netdb.h> */ #define HAVE_GETNAMEINFO_PROTO 1 /* define if getrusage prototype is in <sys/resource.h> */ #define HAVE_GETRUSAGE_PROTO 1 /* Define to 1 if you have the `hstrerror' function. */ #define HAVE_HSTRERROR 1 /* define if hstrerror prototype is in <netdb.h> */ #define HAVE_HSTRERROR_PROTO 1 /* Define to 1 if <net/if.h> 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 <net/if.h> */ #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 <arpa/inet.h> */ #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 <arpa/inet.h> */ #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 <netconfig.h> header file. */ /* #undef HAVE_NETCONFIG_H */ /* Define to 1 if you have the <netdb.h> header file. */ #define HAVE_NETDB_H 1 /* Define to 1 if you have the <netdir.h> header file. */ /* #undef HAVE_NETDIR_H */ /* Define to 1 if you have the <netinet/in.h> header file. */ #define HAVE_NETINET_IN_H 1 /* Define to 1 if you have the <net/if_dl.h> 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 <poll.h> 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 <sys/stat.h> */ #define HAVE_PSELECT_PROTO 1 /* Define to 1 if you have the <pthread.h> header file. */ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the <signal.h> 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 <stdio.h> */ #define HAVE_SNPRINTF_PROTO 1 /* Define to 1 if <net/if_dl.h> 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 <sys/socket.h> */ #define HAVE_SOCKATMARK_PROTO 1 /* Define to 1 if you have the <stdio.h> header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the <stropts.h> header file. */ /* #undef HAVE_STROPTS_H */ /* 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 <sys/event.h> header file. */ /* #undef HAVE_SYS_EVENT_H */ /* Define to 1 if you have the <sys/filio.h> header file. */ /* #undef HAVE_SYS_FILIO_H */ /* Define to 1 if you have the <sys/ioctl.h> header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the <sys/param.h> header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the <sys/select.h> header file. */ #define HAVE_SYS_SELECT_H 1 /* Define to 1 if you have the <sys/socket.h> header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the <sys/sockio.h> header file. */ /* #undef HAVE_SYS_SOCKIO_H */ /* Define to 1 if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the <sys/sysctl.h> header file. */ #define HAVE_SYS_SYSCTL_H 1 /* Define to 1 if you have the <sys/time.h> header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the <sys/types.h> header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the <sys/uio.h> header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the <sys/un.h> header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the <sys/wait.h> header file. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if <time.h> or <sys/time.h> defines struct timespec */ #define HAVE_TIMESPEC_STRUCT 1 /* Define to 1 if you have the <time.h> header file. */ #define HAVE_TIME_H 1 /* Define to 1 if you have the <unistd.h> 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 <xti.h> header file. */ /* #undef HAVE_XTI_H */ /* Define to 1 if you have the <xti_inet.h> 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 <sys/time.h> and <time.h>. */ #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 */ #define t_uscalar_t uint32_t /* 16 bit unsigned type */ /* #undef uint16_t */ /* 32 bit unsigned type */ /* #undef uint32_t */ /* 8-bit unsigned type */ /* #undef uint8_t */
这是必需的两个头文件。。。很重要!!
当然我是看着这篇博客搞定的。。。。要管理员权限开启daytime服务 http://lingshaohuprose.blog.163.com/blog/static/169579782201232505248560/
不过源程序不理解啊。。慢慢来吧
#include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: a.out <IPaddress>"); if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); /* daytime server */ if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) err_quit("inet_pton error for %s", argv[1]); if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0) err_sys("connect error"); while ( (n = read(sockfd, recvline, MAXLINE)) > 0) { recvline[n] = 0; /* null terminate */ if (fputs(recvline, stdout) == EOF) err_sys("fputs error"); } if (n < 0) err_sys("read error"); exit(0); }