usock.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:6k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _USOCK_H
  2. #define _USOCK_H
  3. #ifndef _MBUF_H
  4. #include "mbuf.h"
  5. #endif
  6. #ifndef _LZW_H
  7. #include "lzw.h"
  8. #endif
  9. #ifndef _PROC_H
  10. #include "proc.h"
  11. #endif
  12. #ifndef _TCP_H
  13. #include "tcp.h"
  14. #endif
  15. #ifndef _UDP_H
  16. #include "udp.h"
  17. #endif
  18. #ifndef _IP_H
  19. #include "ip.h"
  20. #endif
  21. #ifndef _NETROM_H
  22. #include "netrom.h"
  23. #endif
  24. #ifndef _SOCKADDR_H
  25. #include "sockaddr.h"
  26. #endif
  27. struct loc {
  28. struct usock *peer;
  29. struct mbuf *q;
  30. int hiwat; /* Flow control point */
  31. int flags;
  32. #define LOC_SHUTDOWN 1
  33. };
  34. #define LOCDFLOW 5 /* dgram socket flow-control point, packets */
  35. #define LOCSFLOW 2048 /* stream socket flow control point, bytes */
  36. #define SOCKBASE 128 /* Start of socket indexes */
  37. union sp {
  38.         struct sockaddr *sa;
  39.         struct sockaddr_in *in;
  40.         struct sockaddr_ax *ax;
  41.         struct sockaddr_nr *nr;
  42. };
  43. struct socklink {
  44. int type; /* Socket type */
  45. int (*socket)(struct usock *,int);
  46. int (*bind)(struct usock *);
  47. int (*listen)(struct usock *,int);
  48. int (*connect)(struct usock *);
  49. int accept;
  50. int (*recv)(struct usock *,struct mbuf **,struct sockaddr *,int *);
  51. int (*send)(struct usock *,struct mbuf **,struct sockaddr *);
  52. int (*qlen)(struct usock *,int);
  53. int (*kick)(struct usock *);
  54. int (*shut)(struct usock *,int);
  55. int (*close)(struct usock *);
  56. int (*check)(struct sockaddr *,int);
  57. char **error;
  58. char *(*state)(struct usock *);
  59. int (*status)(struct usock *);
  60. char *eol;
  61. };
  62. extern struct socklink Socklink[];
  63. union cb {
  64. struct tcb *tcb;
  65. struct ax25_cb *ax25;
  66. struct udp_cb *udp;
  67. struct raw_ip *rip;
  68. struct raw_nr *rnr;
  69. struct nr4cb *nr4;
  70. struct loc *local;
  71. void *p;
  72. };
  73. /* User sockets */
  74. struct usock {
  75. unsigned index;
  76. struct proc *owner;
  77. int refcnt;
  78. char noblock;
  79. enum {
  80. NOTUSED,
  81. TYPE_TCP,
  82. TYPE_UDP,
  83. TYPE_AX25I,
  84. TYPE_AX25UI,
  85. TYPE_RAW,
  86. TYPE_NETROML3,
  87. TYPE_NETROML4,
  88. TYPE_LOCAL_STREAM,
  89. TYPE_LOCAL_DGRAM,
  90. } type;
  91. struct socklink *sp;
  92. int rdysock;
  93. union cb cb;
  94. struct sockaddr *name;
  95. int namelen;
  96. struct sockaddr *peername;
  97. int peernamelen;
  98. uint8 errcodes[4]; /* Protocol-specific error codes */
  99. uint8 tos; /* Internet type-of-service */
  100. int flag; /* Mode flags, defined in socket.h */
  101. };
  102. extern char *(*Psock[])(struct sockaddr *);
  103. extern char Badsocket[];
  104. extern char *Socktypes[];
  105. extern struct usock **Usock;
  106. extern unsigned Nsock;
  107. extern uint16 Lport;
  108. struct usock *itop(int s);
  109. void st_garbage(int red);
  110. /* In axsocket.c: */
  111. int so_ax_sock(struct usock *up,int protocol);
  112. int so_ax_bind(struct usock *up);
  113. int so_ax_listen(struct usock *up,int backlog);
  114. int so_ax_conn(struct usock *up);
  115. int so_ax_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  116. int *fromlen);
  117. int so_ax_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  118. int so_ax_qlen(struct usock *up,int rtx);
  119. int so_ax_kick(struct usock *up);
  120. int so_ax_shut(struct usock *up,int how);
  121. int so_ax_close(struct usock *up);
  122. int checkaxaddr(struct sockaddr *name,int namelen);
  123. int so_axui_sock(struct usock *up,int protocol);
  124. int so_axui_bind(struct usock *up);
  125. int so_axui_conn(struct usock *up);
  126. int so_axui_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  127. int *fromlen);
  128. int so_axui_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  129. int so_axui_qlen(struct usock *up,int rtx);
  130. int so_axui_shut(struct usock *up,int how);
  131. int so_axui_close(struct usock *up);
  132. char *axpsocket(struct sockaddr *p);
  133. char *axstate(struct usock *up);
  134. int so_ax_stat(struct usock *up);
  135. /* In ipsocket.c: */
  136. int so_ip_sock(struct usock *up,int protocol);
  137. int so_ip_conn(struct usock *up);
  138. int so_ip_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  139. int *fromlen);
  140. int so_ip_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  141. int so_ip_qlen(struct usock *up,int rtx);
  142. int so_ip_close(struct usock *up);
  143. int checkipaddr(struct sockaddr *name,int namelen);
  144. char *ippsocket(struct sockaddr *p);
  145. /* In locsocket.c: */
  146. int so_los(struct usock *up,int protocol);
  147. int so_lod(struct usock *up,int protocol);
  148. int so_lo_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  149. int *fromlen);
  150. int so_los_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  151. int so_lod_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  152. int so_lod_qlen(struct usock *up,int rtx);
  153. int so_los_qlen(struct usock *up,int rtx);
  154. int so_loc_shut(struct usock *up,int how);
  155. int so_loc_close(struct usock *up);
  156. char *lopsocket(struct sockaddr *p);
  157. int so_loc_stat(struct usock *up);
  158. /* In nrsocket.c: */
  159. int so_n3_sock(struct usock *up,int protocol);
  160. int so_n4_sock(struct usock *up,int protocol);
  161. int so_n4_listen(struct usock *up,int backlog);
  162. int so_n3_conn(struct usock *up);
  163. int so_n4_conn(struct usock *up);
  164. int so_n3_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  165. int *fromlen);
  166. int so_n4_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  167. int *fromlen);
  168. int so_n3_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  169. int so_n4_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  170. int so_n3_qlen(struct usock *up,int rtx);
  171. int so_n4_qlen(struct usock *up,int rtx);
  172. int so_n4_kick(struct usock *up);
  173. int so_n4_shut(struct usock *up,int how);
  174. int so_n3_close(struct usock *up);
  175. int so_n4_close(struct usock *up);
  176. int checknraddr(struct sockaddr *name,int namelen);
  177. char *nrpsocket(struct sockaddr *p);
  178. char *nrstate(struct usock *up);
  179. int so_n4_stat(struct usock *up);
  180. /* In tcpsock.c: */
  181. int so_tcp(struct usock *up,int protocol);
  182. int so_tcp_listen(struct usock *up,int backlog);
  183. int so_tcp_conn(struct usock *up);
  184. int so_tcp_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  185. int *fromlen);
  186. int so_tcp_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  187. int so_tcp_qlen(struct usock *up,int rtx);
  188. int so_tcp_kick(struct usock *up);
  189. int so_tcp_shut(struct usock *up,int how);
  190. int so_tcp_close(struct usock *up);
  191. char *tcpstate(struct usock *up);
  192. int so_tcp_stat(struct usock *up);
  193. /* In udpsocket.c: */
  194. int so_udp(struct usock *up,int protocol);
  195. int so_udp_bind(struct usock *up);
  196. int so_udp_conn(struct usock *up);
  197. int so_udp_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from,
  198. int *fromlen);
  199. int so_udp_send(struct usock *up,struct mbuf **bp,struct sockaddr *to);
  200. int so_udp_qlen(struct usock *up,int rtx);
  201. int so_udp_shut(struct usock *up,int how);
  202. int so_udp_close(struct usock *up);
  203. int so_udp_stat(struct usock *up);
  204. #endif /* _USOCK_H */