`
jakielong
  • 浏览: 229462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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    <sys/types.h>       /* basic system data types */
 #include    <sys/socket.h>      /* basic socket definitions */
 #include    <sys/time.h>        /* timeval{} for select() */
 #include    <time.h>            /* timespec{} for pselect() */
 #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
 # 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
 #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 */
 #endif

 #ifndef 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
 #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

 /* Define bzero() as a macro if it's not in standard C library. */
 #ifndef HAVE_BZERO
 #define bzero(ptr,n)        memset (ptr, 0, n)
 #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 */
 };

 /* 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
 #define CMSG_LEN(size)      (sizeof(struct cmsghdr) + (size))
 #endif
 #ifndef 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
 # 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 */
 #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 */

 /* Following shortens all the typecasts of pointer arguments: */
 #define SA struct sockaddr

 #define HAVE_STRUCT_SOCKADDR_STORAGE
 #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", ... */
 };
 #endif

 #ifndef HAVE_TIMESPEC_STRUCT
 struct timespec {
     time_t tv_sec;              /* seconds */
     long     tv_nsec;           /* and nanoseconds */
 };
 #endif
 
分享到:
评论

相关推荐

    unp 64bit CentOS编译

    总结起来,这个压缩包提供了一套在64位CentOS7系统上进行Unix网络编程的基础,包括关键的头文件`unp.h`,配置文件`config.h`,以及编译好的静态库`libunp.a`。用户可以通过编译和链接这些资源,实现书中的示例代码,...

    unpv13e-master.zip

    文件中的源代码可能涵盖了TCP(传输控制协议)和UDP(用户数据报协议)这两种主要的传输层协议。TCP提供面向连接、可靠的数据传输,而UDP则是一种无连接、不可靠的传输方式。理解它们的工作机制和在不同场景下的...

    《UNIX网络编程》环境配置

    将文件解压到/usr/include/目录下,并根据自己的代码需要,更改unp.h文件中的#include "unp/xxx.c"行,使相应的*.c文件包含在内,别的不做任何更改就可以运行《UNIX网络编程》书里的程序了……

    unpv13e.zip

    描述中的关键信息是用户需要将"error.c"、"unp.h"和"config.h"这三个文件放到"/usr/include/"目录下。这表明这些文件是编译其他程序时所需的头文件和源代码。在Unix或类Unix系统中,"/usr/include/"目录用于存放系统...

    Unix网络编程源代码使用

    - 修改 `unp.h` 文件中的 `#include "config.h"` 为 `#include &lt;config.h&gt;`。 2. **编译客户端程序**: - 编译时需要包含 `error.o` 文件,以便提供 `err_` 开头的一系列错误处理函数。 #### 七、总结 通过以上...

    《Unix网络编程》环境搭建

    文章目录Ubuntu《Unix网络编程》环境搭建下载文件解压缩按照README 依次执行修改inet_ntop.c文件添加到共享库目录修改unp.h程序各文件相对位置case1:case 2:编译执行小问题 下载文件 为了方便获取,我上传到了github ...

    HONEYWELL DCS HM 初始化资料.doc

    这包括PRS4VOLZ.EC、&OPR、&UNP(可选)、&OVG、&CUS、&HGO、&NMO、&UCN、&NGO、&CION和&CUS(可选)等文件。对于每个文件,系统会询问是否要拷贝,以及在哪个卷上创建目录,一般回答是&001。 整个初始化过程需要...

    基本UDP套接口编程

    #include "unp.h" int main(int argc, char** argv) { int sockfd; // 套接字 struct sockaddr_in servaddr, cliaddr; // IPv4套接字地址 sockfd = Socket(AF_INET, SOCK_DGRAM, 0); // 创建UDP套接字 bzero(&...

    linuxtcpipsocket

    #include "unp.h" void str_cli(FILE *fp, int sockfd) { char sendline[MAXLINE], recvline[MAXLINE]; while (fgets(sendline, MAXLINE, fp) != NULL) { Writen(sockfd, sendline, strlen(sendline)); if ...

    Unix_Socket程序设计1.pdf

    #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 &lt;IP address&gt;"); if ((sockfd = ...

    unpv13e.tar.gz2

    "unp"标签则进一步确认了这是关于UNIX网络编程的内容。"tar.gz"是UNIX/Linux系统中常用的归档和压缩格式,意味着我们需要使用相应的工具来解压这个文件,例如使用"tar -zxvf unpv13e.tar.gz2"命令。 解压后,我们...

    JP 摩根-美股-交通运输与物流行业-冬季会议和管理会议问题手册-2-34页.pdf

    从提供的文件内容来看,这是一份由JP摩根编写的关于美股交通运输与物流行业的冬季会议和管理会议问题手册。手册中包含了为即将参加各类会议的公司管理层准备的针对不同话题的特定问题,以及针对整个行业的更广泛主题...

    Java网络编程--Unix域协议:实现

    Unix域协议的实现分散在多个C文件中,如`sys/un.h`定义了`sockaddr_un`结构,`sys/unpcb.h`定义了`unpcb`结构,而`kern/uipc_proto.c`和`kern/uipc_usrreq.c`则包含了主要的函数实现。此外,还有一些与管道(pipe)...

    udp echo server client

    这个项目可能来自于《Unix Network Programming》(通常简称UNP)一书中的示例。 首先,让我们理解UDP回显服务的工作原理:客户端发送数据到服务器,服务器接收到数据后,不做任何处理,直接将数据原封不动地回送给...

    honeywell-TPS系统结点装载步骤

    这部分内容由于扫描文字识别问题,信息不完整,需要参照实际操作和系统备份盘中的指导文件。 综上所述,Honeywell TPS系统各结点的装载步骤对系统稳定运行至关重要。正确掌握各结点的装载方法不仅能够帮助维护人员...

Global site tag (gtag.js) - Google Analytics