LouZhang

导航

UNIX网络编程 -- -- 一个简单的时间获取客户程序

http://www.cnblogs.com/blacksword/archive/2012/03/03/2378655.html

先看看这个链接

unp.h

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
/* 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);
}

posted on 2012-11-23 20:46  louzhang_swk  阅读(1153)  评论(0编辑  收藏  举报