免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2915 | 回复: 5
打印 上一主题 下一主题

求unix网络编程第三版的unp.h [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-08 16:19 |只看该作者 |倒序浏览
sdj.gao@163.net

先谢谢了

论坛徽章:
0
2 [报告]
发表于 2007-03-08 16:23 |只看该作者
人肉google?

论坛徽章:
0
3 [报告]
发表于 2007-03-08 16:27 |只看该作者
p了楼主
去**下载

论坛徽章:
0
4 [报告]
发表于 2007-03-08 16:46 |只看该作者

  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 few
  103.    implementations support them today. These two macros really need
  104.     an ALIGN() macro, but each implementation does this differently. */
  105. #ifndef CMSG_LEN
  106. #define CMSG_LEN(size)      (sizeof(struct cmsghdr) + (size))
  107. #endif
  108. #ifndef CMSG_SPACE
  109. #define CMSG_SPACE(size)    (sizeof(struct cmsghdr) + (size))
  110. #endif

  111. /* POSIX requires the SUN_LEN() macro, but not all implementations define
  112.    it (yet). Note that this 4.4BSD macro works regardless whether there is
  113.    a length field or not. */
  114. #ifndef SUN_LEN
  115. # define    SUN_LEN (su) \
  116.     (sizeof (*(su)) - sizeof ((su)->sun_path) + strlen((su)->sun_path))
  117. #endif

  118. /* POSIX renames "Unix domain" as "local IPC."
  119.    Not all systems define AF_LOCAL and PF_LOCAL (yet). */
  120. #ifndef AF_LOCAL
  121. #define AF_LOCAL    AF_UNIX
  122. #endif
  123. #ifndef PF_LOCAL
  124. #define PF_LOCAL    PF_UNIX
  125. #endif

  126. /* POSIX requires that an #include of <poll.h> define INFTIM, but many
  127.    systems still define it in <sys/stropts.h>. We don't want to include
  128.    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 INFTIM
  131. #define INFTIM          (-1)     /* infinite poll timeout */
  132. #ifdef HAVE_POLL_H
  133. #define INFTIM_UNPH              /* tell unpxti.h we defined it */
  134. #endif
  135. #endif

  136. /* Following could be derived from SOMAXCONN in <sys/socket.h>, but many
  137.    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 sockaddr

  149. #define HAVE_STRUCT_SOCKADDR_STORAGE
  150. #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
  151. /*
  152. * RFC 3493: protocol-independent placeholder for socket addresses
  153. */
  154. #define __SS_MAXSIZE    128
  155. #define __SS_ALIGNSIZE  (sizeof(int64_t))
  156. #ifdef HAVE_SOCKADDR_SA_LEN
  157. #define __SS_PAD1SIZE   (__SS_ALIGNSIZE - sizeof(u_char) - sizeof(sa_family_t))
  158. #else
  159. #define __SS_PAD1SIZE   (__SS_ALIGNSIZE - sizeof(sa_family_t))
  160. #endif
  161. #define __SS_PAD2SIZE   (__SS_MAXSIZE - 2*__SS_ALIGNSIZE)

  162. struct sockaddr_storage {
  163. #ifdef HAVE_SOCKADDR_SA_LEN
  164.     u_char  ss_len;
  165. #endif
  166.     sa_family_t ss_family;
  167.     char    __ss_pad1[__SS_PAD1SIZE];
  168.     int64_t __ss_align;
  169.     char    __ss_pad2[__SS_PAD2SIZE];
  170. };
  171. #endif

  172. #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_STRUCT
  180. # include   "../lib/addrinfo.h"
  181. #endif

  182. #ifndef HAVE_IF_NAMEINDEX_STRUCT
  183. struct if_nameindex {
  184.     unsigned int if_index;      /* 1, 2, ... */
  185.     char *if_name;              /* null-terminated name: "le0", ... */
  186. };
  187. #endif

  188. #ifndef HAVE_TIMESPEC_STRUCT
  189. struct timespec {
  190.     time_t tv_sec;              /* seconds */
  191.     long     tv_nsec;           /* and nanoseconds */
  192. };
  193. #endif


复制代码

论坛徽章:
0
5 [报告]
发表于 2007-03-09 05:57 |只看该作者
看书,附录和前言。

论坛徽章:
0
6 [报告]
发表于 2007-03-09 09:56 |只看该作者
附录里面好像有吧,也可以下载
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP