socks.h
上传用户:zm130024
上传日期:2007-01-04
资源大小:432k
文件大小:20k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1997, 1998, 1999
  3.  *      Inferno Nettverk A/S, Norway.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. The above copyright notice, this list of conditions and the following
  9.  *    disclaimer must appear in all copies of the software, derivative works
  10.  *    or modified versions, and any portions thereof, aswell as in all
  11.  *    supporting documentation.
  12.  * 2. All advertising materials mentioning features or use of this software
  13.  *    must display the following acknowledgement:
  14.  *      This product includes software developed by
  15.  *      Inferno Nettverk A/S, Norway.
  16.  * 3. The name of the author may not be used to endorse or promote products
  17.  *    derived from this software without specific prior written permission.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  20.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  21.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  22.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  23.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  24.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  28.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  *
  30.  * Inferno Nettverk A/S requests users of this software to return to
  31.  *
  32.  *  Software Distribution Coordinator  or  sdc@inet.no
  33.  *  Inferno Nettverk A/S
  34.  *  Oslo Research Park
  35.  *  Gaustadal閑n 21
  36.  *  N-0349 Oslo
  37.  *  Norway
  38.  *
  39.  * any improvements or extensions that they make and grant Inferno Nettverk A/S
  40.  * the rights to redistribute these changes.
  41.  *
  42.  */
  43. /* $Id: socks.h,v 1.150 1999/12/22 09:29:20 karls Exp $ */
  44. #ifndef _SOCKS_H_
  45. #define _SOCKS_H_
  46. #endif  /* ! _SOCKS_H_ */
  47. #ifdef lint
  48. extern const int lintnoloop_socks_h;
  49. #else
  50. #define lintnoloop_socks_h 0
  51. #endif
  52. #ifndef HAVE_OSF_OLDSTYLE
  53. #define HAVE_OSF_OLDSTYLE 0
  54. #endif  /* !HAVE_OSF_OLDSTYLE */
  55. #ifdef SOCKSLIBRARY_DYNAMIC
  56. #ifdef accept
  57. #undef accept
  58. #endif  /* accept */
  59. #if HAVE_EXTRA_OSF_SYMBOLS
  60. #define accept(s, addr, addrlen) sys_Eaccept(s, addr, addrlen)
  61. #else
  62. #define accept(s, addr, addrlen) sys_accept(s, addr, addrlen)
  63. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  64. #ifdef bind
  65. #undef bind
  66. #endif  /* bind */
  67. #define bind(s, name, namelen) sys_bind(s, name, namelen)
  68. #ifdef bindresvport
  69. #undef bindresvport
  70. #endif  /* bindresvport */
  71. #define bindresvport(sd, sin) sys_bindresvport(sd, sin)
  72. #ifdef connect
  73. #undef connect
  74. #endif  /* connect */
  75. #define connect(s, name, namelen) sys_connect(s, name, namelen)
  76. #ifdef gethostbyname
  77. #undef gethostbyname
  78. #endif  /* gethostbyname */
  79. #define gethostbyname(name) sys_gethostbyname(name)
  80. #ifdef gethostbyname2
  81. #undef gethostbyname2
  82. #endif  /* gethostbyname2 */
  83. #define gethostbyname2(name, af) sys_gethostbyname2(name, af)
  84. #ifdef getpeername
  85. #undef getpeername
  86. #endif  /* getpeername */
  87. #if HAVE_EXTRA_OSF_SYMBOLS
  88. #define getpeername(s, name, namelen) sys_Egetpeername(s, name, namelen)
  89. #else
  90. #define getpeername(s, name, namelen) sys_getpeername(s, name, namelen)
  91. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  92. #ifdef getsockname
  93. #undef getsockname
  94. #endif  /* getsockname */
  95. #if HAVE_EXTRA_OSF_SYMBOLS
  96. #define getsockname(s, name, namelen) sys_Egetsockname(s, name, namelen)
  97. #else
  98. #define getsockname(s, name, namelen) sys_getsockname(s, name, namelen)
  99. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  100. #ifdef read
  101. #undef read
  102. #endif  /* read */
  103. #define read(d, buf, nbytes) sys_read(d, buf, nbytes)
  104. #ifdef readv
  105. #undef readv
  106. #endif  /* readv */
  107. #if HAVE_EXTRA_OSF_SYMBOLS
  108. #define readv(d, iov, iovcnt) sys_Ereadv(d, iov, iovcnt)
  109. #else
  110. #define readv(d, iov, iovcnt) sys_readv(d, iov, iovcnt)
  111. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  112. #ifdef recv
  113. #undef recv
  114. #endif  /* recv */
  115. #define recv(s, msg, len, flags) sys_recv(s, msg, len, flags)
  116. #ifdef recvfrom
  117. #undef recvfrom
  118. #endif  /* recvfrom */
  119. #if HAVE_EXTRA_OSF_SYMBOLS
  120. #define recvfrom(s, buf, len, flags, from, fromlen)
  121.   sys_Erecvfrom(s, buf, len, flags, from, fromlen)
  122. #else
  123. #define recvfrom(s, buf, len, flags, from, fromlen)
  124.   sys_recvfrom(s, buf, len, flags, from, fromlen)
  125. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  126. #ifdef recvmsg
  127. #undef recvmsg
  128. #endif  /* recvmsg */
  129. #if HAVE_EXTRA_OSF_SYMBOLS
  130. #define recvmsg(s, msg, flags) sys_Erecvmsg(s, msg, flags)
  131. #else
  132. #define recvmsg(s, msg, flags) sys_recvmsg(s, msg, flags)
  133. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  134. #ifdef rresvport
  135. #undef rresvport
  136. #endif  /* rresvport */
  137. #define rresvport(port) sys_rresvport(port)
  138. #ifdef sendto
  139. #undef sendto
  140. #endif  /* sendto */
  141. #define sendto(s, msg, len, flags, to, tolen)
  142.   sys_sendto(s, msg, len, flags, to, tolen)
  143. #ifdef write
  144. #undef write
  145. #endif  /* write */
  146. #define write(d, buf, nbytes) sys_write(d, buf, nbytes)
  147. #ifdef writev
  148. #undef writev
  149. #endif  /* writev */
  150. #if HAVE_EXTRA_OSF_SYMBOLS
  151. #define writev(d, iov, iovcnt) sys_Ewritev(d, iov, iovcnt)
  152. #else
  153. #define writev(d, iov, iovcnt) sys_writev(d, iov, iovcnt)
  154. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  155. #ifdef send
  156. #undef send
  157. #endif  /* send */
  158. #define send(s, msg, len, flags) sys_send(s, msg, len, flags)
  159. #ifdef sendmsg
  160. #undef sendmsg
  161. #endif  /* sendmsg */
  162. #if HAVE_EXTRA_OSF_SYMBOLS
  163. #define sendmsg(s, msg, flags) sys_Esendmsg(s, msg, flags)
  164. #else
  165. #define sendmsg(s, msg, flags) sys_sendmsg(s, msg, flags)
  166. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  167. #endif /* SOCKSLIBRARY_DYNAMIC */
  168. struct configstate_t {
  169. unsigned init:1;
  170. unsigned :0;
  171. struct sockaddr lastconnect; /* address we last connected to. */
  172. pid_t pid;
  173. unsigned :0;
  174. };
  175. struct option_t {
  176. int debug;
  177. char *configfile; /* name of current configfile. */
  178. unsigned lbuf:1; /* linebuffered output? */
  179. unsigned :0;
  180. };
  181. struct config_t {
  182. pid_t connectchild; /* connect process. */
  183. int connect_s; /* socket to child. */
  184. char domain[MAXHOSTNAMELEN]; /* localdomain. */
  185. struct logtype_t log; /* where to log. */
  186. struct option_t option; /* misc. options. */
  187. struct configstate_t state;
  188. int resolveprotocol; /* resolveprotocol. */
  189. struct route_t *route; /* linked list of routes*/
  190. };
  191. struct childpacket_t {
  192.    struct sockshost_t   src;
  193.    struct sockshost_t   dst;
  194.    struct socks_t       packet;
  195. };
  196. __BEGIN_DECLS
  197. /*
  198.  * libsocks function declarations
  199.  */
  200. void
  201. clientinit __P((void));
  202. /*
  203.  * initialises clientstate, reads configfile, etc.
  204.  */
  205. #if !HAVE_OSF_OLDSTYLE
  206. int Raccept __P((int, struct sockaddr *, socklen_t *));
  207. int Rconnect __P((int, const struct sockaddr *, socklen_t));
  208. int Rgetsockname __P((int, struct sockaddr *, socklen_t *));
  209. int Rgetpeername __P((int, struct sockaddr *, socklen_t *));
  210. ssize_t Rsendto __P((int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen));
  211. ssize_t Rrecvfrom __P((int s, void *buf, size_t len, int flags, struct sockaddr * from, socklen_t *fromlen));
  212. ssize_t Rsendmsg __P((int s, const struct msghdr *msg, int flags));
  213. ssize_t Rrecvmsg __P((int s, struct msghdr *msg, int flags));
  214. int Rbind __P((int, const struct sockaddr *, socklen_t));
  215. #endif  /* !HAVE_OSF_OLDSTYLE */
  216. int Rbindresvport __P((int, struct sockaddr_in *));
  217. int Rrresvport __P((int *));
  218. struct hostent *Rgethostbyname __P((const char *));
  219. struct hostent *Rgethostbyname2 __P((const char *, int af));
  220. ssize_t Rwrite __P((int d, const void *buf, size_t nbytes));
  221. ssize_t Rwritev __P((int d, const struct iovec *iov, int iovcnt));
  222. ssize_t Rsend __P((int s, const void *msg, size_t len, int flags));
  223. ssize_t Rread __P((int d, void *buf, size_t nbytes));
  224. ssize_t Rreadv __P((int d, const struct iovec *iov, int iovcnt));
  225. ssize_t Rrecv __P((int s, void *msg, size_t len, int flags));
  226. int SOCKSinit __P((char *));
  227. int Rlisten __P((int, int));
  228. int Rselect __P((int, fd_set *, fd_set *, fd_set *, struct timeval *));
  229. /*
  230.  * unused functions needed to compile programs with support for other
  231.  * socks implementations.
  232.  */
  233. int
  234. udpsetup __P((int s, const struct sockaddr *to, int type));
  235. /*
  236.  * sets up udp relaying between address of "s" and "to" by connecting
  237.  * to socksserver.
  238.  * If relaying is already set up the function returns with success.
  239.  * Type is the type of connection setup, SOCKS_SEND or SOCKS_RECV.
  240.  * At the moment only SOCKS_SEND is supported.
  241.  * Returns:
  242.  * On success: 0
  243.  * On failure: -1
  244.  */
  245. int
  246. negotiate_method __P((int s, struct socks_t *packet));
  247. /*
  248.  * Negotiates a method to be used when talking with the server connected
  249.  * to "s".  "packet" is the packet that will later be sent to server,
  250.  * only the "auth" element in it will be set but other elements are needed
  251.  * too.
  252.  * Returns:
  253.  * On success: 0
  254.  * On failure: -1
  255.  */
  256. int
  257. socks_sendrequest __P((int s, const struct request_t *request));
  258. /*
  259.  * Sends the request "request" to the socksserver connected to "s".
  260.  * Returns:
  261.  * On success: 0
  262.  * On failure: -1
  263.  */
  264. int
  265. socks_recvresponse __P((int s, struct response_t *response, int version));
  266. /*
  267.  * Receives a socks response from the "s".  "response" is filled in with
  268.  * the data received.
  269.  * "version" is the protocolversion negotiated.
  270.  * Returns:
  271.  * On success: 0
  272.  * On failure: -1
  273.  */
  274. int
  275. socks_negotiate __P((int s, int control, struct socks_t *packet,
  276. struct route_t *route));
  277. /*
  278.  * "s" is the socket data will flow over.
  279.  * "control" is the control connection to the socks server.
  280.  * "packet" is a socks packet containing the request.
  281.  * "route" is the connected route.
  282.  * Negotiates method and fills the response to the request into packet->res.
  283.  * Returns:
  284.  * On success: 0.  (server accepted our request.)
  285.  * On failure: -1.
  286.  */
  287. struct route_t *
  288. socks_nbconnectroute __P((int s, int control, struct socks_t *packet,
  289.   const struct sockshost_t *src,
  290.   const struct sockshost_t *dst));
  291. /*
  292.  * The non-blocking version of socks_connectroute(), only used by client.
  293.  * Takes one additional argument, "s", which is the socket to connect
  294.  * and not necessarily the same as "control" (msproxy case).
  295.  */
  296. void
  297. socks_badroute __P((struct route_t *route));
  298. /*
  299.  * Marks route "route" as bad.
  300.  */
  301. int
  302. recv_sockshost __P((int s, struct sockshost_t *host, int version));
  303. /*
  304.  * Fills "host" based on data read from "s".  "version" is the version
  305.  * the remote peer is expected to send data in.
  306.  *
  307.  * Returns:
  308.  * On success: 0
  309.  * On failure: -1
  310.  */
  311. /*
  312.  *  Misc. functions to help keep track of our connection(s) to the server.
  313. */
  314. struct socksfd_t *
  315. socks_addaddr __P((unsigned int clientfd, struct socksfd_t *socksaddress));
  316. /*
  317.  * "clientfd" is associated with the structure "socksfd".
  318.  * The function duplicates all arguments in it's own form and does
  319.  * not access the memory referenced by them afterwards.
  320.  *
  321.  * The function checks the state of all filedescriptors on each call and
  322.  * removes those that are no longer open.
  323.  *
  324.  * Returns:
  325.  * On success: pointer to the added socksfd_t structure.
  326.  * On failure: exits.  (memory exhausted and process grew descriptor size.)
  327.  *
  328.  */
  329. struct socksfd_t *
  330. socks_getaddr __P((unsigned int fd));
  331. /*
  332.  * Returns:
  333.  * On success:  the socketaddress associated with filedescriptor "fd".
  334.  * On failure:  NULL.  (no socketaddress associated with "fd").
  335.  */
  336. void
  337. socks_rmaddr __P((unsigned int s));
  338. /*
  339.  * removes the association for the socket "s", also closes the server
  340.  * connection.  If "s" is not registered the request is ignored.
  341.  */
  342. struct socksfd_t *
  343. socksfddup __P((const struct socksfd_t *old, struct socksfd_t *new));
  344. /*
  345.  * Duplicates "old", in "new".
  346.  * Returns:
  347.  * On success: "new".
  348.  * On failure: NULL (resource shortage).
  349.  */
  350. int
  351. socks_addrcontrol __P((const struct sockaddr *local,
  352.   const struct sockaddr *remote));
  353. /*
  354.  * Goes through all addresses registered and tries to find one where
  355.  * the control socket has a local address of "local" and peer address
  356.  * of "remote".  If either of "local" or "remote" is NULL, that
  357.  * endpoint is not checked against.
  358.  * Returns:
  359.  * On success: the descriptor the socksfd struct was registered with.
  360.  * On failure: -1
  361.  */
  362. int
  363. socks_addrmatch __P((const struct sockaddr *local,
  364. const struct sockaddr *remote,
  365. const struct socksstate_t *state));
  366. /*
  367.  * Goes through all addresses registered and tries to find one where
  368.  * all arguments match.
  369.  * Arguments that are NULL or have "illegal" values are ignored.
  370.  * Returns:
  371.  * On success: the descriptor the socksfd with matching arguments was
  372.  *                registered with (>= 0).
  373.  * On failure: -1.
  374.  */
  375. int
  376. socks_isaddr __P((unsigned int fd));
  377. /*
  378.  * Returns true if there is a address registered for the socket "fd", false
  379.  * otherwise.
  380.  */
  381. int
  382. socks_addrisok __P((unsigned int s));
  383. /*
  384.  * Compares the current address of "s" to the registered address.
  385.  * If there is a mismatch, the function will try to correct it if possible.
  386.  * Returns:
  387.  * If current address found to match registered: true.
  388.  * Else: false.
  389.  */
  390. int
  391. socks_addfd __P((unsigned int fd));
  392. /*
  393.  * adds the filedescriptor "fd" to an internal table.
  394.  * If it is already in the table the  request is ignored.
  395.  * Returns:
  396.  * On success: 0
  397.  * On failure: -1
  398.  */
  399. int
  400. socks_isfd __P((unsigned int fd));
  401. /*
  402.  * returns 1 if "fd" is a filedescriptor in our internal table, 0 if not.
  403.  */
  404. void
  405. socks_rmfd __P((unsigned int fd));
  406. /*
  407.  * removes the filedescriptor "fd" from our internal table.
  408.  */
  409. int
  410. fdisopen __P((int fd));
  411. /*
  412.  * returns 1 if the filedescriptor "fd" currently references a open object.
  413.  * returns 0 otherwise.
  414.  */
  415. int
  416. clientmethod_uname __P((int s, const struct sockshost_t *host, int version));
  417. /*
  418.  * Enters username/password negotiation with the socksserver connected to
  419.  * the socket "s".
  420.  * "host" gives the name of the server.
  421.  * "version" gives the socksversion established to use.
  422.  * Returns:
  423.  * On success: 0
  424.  * On failure: whatever the remote socksserver returned as status.
  425.  */
  426. char *
  427. socks_getusername __P((const struct sockshost_t *host, char *buf,
  428.   size_t buflen));
  429. /*
  430.  * Tries to determine the username of the current user, to be used
  431.  * when negotiating with the server "host".
  432.  * The NUL-terminated username is written to "buf", which is of length
  433.  * "buflen".
  434.  * Returns:
  435.  * On success: pointer to "buf" with the username.
  436.  * On failure: NULL.
  437.  */
  438. char *
  439. socks_getpassword __P((const struct sockshost_t *host, const char *user,
  440.   char *buf, size_t buflen));
  441. /*
  442.  * Tries to determine the password of user "user", to be used
  443.  * when negotiating with the server "host".
  444.  * The NUL-terminated password is written to "buf", which is of length
  445.  * "buflen"
  446.  * Returns:
  447.  * On success: pointer to "buf" with the password.
  448.  * On failure: NULL.
  449.  */
  450. int
  451. send_interfacerequest __P((int s, const struct interfacerequest_t *ifreq,
  452.    int version));
  453. /*
  454.  * Sends the interfacerequest "ifreq" to server connected to "s".
  455.  * "version" is the protocolversion previously negotiated with server.
  456.  *  Returns:
  457.  * On success: 0
  458.  * On failure: -1
  459.  */
  460. int
  461. serverreplyisok __P((int version, int reply, struct route_t *route));
  462. /*
  463.  * "replycode" is the reply code returned by a socksserver of version
  464.  * "version".
  465.  * "route" is the route that was used for the socksserver.  If
  466.  * the errorcode indicates a serverfailure, it might be "badrouted".
  467.  * Returns true if the reply indicates request succeeded, false otherwise
  468.  * and sets errno accordingly.
  469.  */
  470. int
  471. msproxy_negotiate __P((int s, int control, struct socks_t *packet));
  472. /*
  473.  * Negotiates with the msproxy server connected to "control".
  474.  * "s" gives the socket to be used for dataflow.
  475.  * "packet" contains the request and on return from the function
  476.  * contains the response.
  477.  * Returns:
  478.  * On success: 0
  479.  * On failure: -1
  480.  */
  481. int
  482. send_msprequest __P((int s, struct msproxy_state_t *state,
  483.   struct msproxy_request_t *packet));
  484. /*
  485.  * Sends a msproxy request to "s".
  486.  * "state" is the current state of the connection to "s",
  487.  * "packet" is the request to send.
  488.  */
  489. int
  490. recv_mspresponse __P((int s, struct msproxy_state_t *state,
  491.   struct msproxy_response_t *packet));
  492. /*
  493.  * Receives a msproxy response from "s".
  494.  * "state" is the current state of the connection to "s",
  495.  * "packet" is the memory the response is read into.
  496.  */
  497. int
  498. msproxy_sigio __P((int s));
  499. /*
  500.  * Must be called on sockets where we expect the connection to be forwarded
  501.  * by the msproxy server.
  502.  * "s" is the socket and must have been added with socks_addaddr() beforehand.
  503.  * Returns:
  504.  * On success: 0
  505.  * On failure: -1
  506.  */
  507. int
  508. msproxy_init __P((void));
  509. /*
  510.  * inits things for using a msproxyserver.
  511.  * On success: 0
  512.  * On failure: -1
  513.  */
  514. #if DIAGNOSTIC
  515. void
  516. cc_socksfdv(int sig);
  517. /*
  518.  * concistencycheck on socksfdv.
  519.  */
  520. #endif
  521. #ifdef SOCKSLIBRARY_DYNAMIC
  522. int sys_rresvport __P((int *));
  523. int sys_bindresvport __P((int, struct sockaddr_in *));
  524. struct hostent *sys_gethostbyname __P((const char *));
  525. struct hostent *sys_gethostbyname2 __P((const char *, int));
  526. HAVE_PROT_READ_0 sys_read
  527. __P((HAVE_PROT_READ_1, HAVE_PROT_READ_2, HAVE_PROT_READ_3));
  528. HAVE_PROT_READV_0 sys_readv
  529. __P((HAVE_PROT_READV_1, HAVE_PROT_READV_2, HAVE_PROT_READV_3));
  530. HAVE_PROT_RECV_0 sys_recv
  531. __P((HAVE_PROT_RECV_1, HAVE_PROT_RECV_2, HAVE_PROT_RECV_3, HAVE_PROT_RECV_4));
  532. HAVE_PROT_RECVMSG_0 sys_recvmsg
  533. __P((HAVE_PROT_RECVMSG_1, HAVE_PROT_RECVMSG_2, HAVE_PROT_RECVMSG_3));
  534. HAVE_PROT_SEND_0 sys_send
  535. __P((HAVE_PROT_SEND_1 , HAVE_PROT_SEND_2, HAVE_PROT_SEND_3, HAVE_PROT_SEND_4));
  536. HAVE_PROT_WRITE_0 sys_write
  537. __P((HAVE_PROT_WRITE_1, HAVE_PROT_WRITE_2, HAVE_PROT_WRITE_3));
  538. #if HAVE_OSF_OLDSTYLE
  539. int sys_accept __P((int, struct sockaddr *, int *));
  540. #else
  541. HAVE_PROT_ACCEPT_0 sys_accept
  542. __P((HAVE_PROT_ACCEPT_1, HAVE_PROT_ACCEPT_2, HAVE_PROT_ACCEPT_3));
  543. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  544. #if HAVE_OSF_OLDSTYLE
  545. int sys_bind __P((int, const struct sockaddr *, int));
  546. #else
  547. HAVE_PROT_BIND_0 sys_bind
  548. __P((HAVE_PROT_BIND_1, HAVE_PROT_BIND_2, HAVE_PROT_BIND_3));
  549. #endif /* !HAVE_OSF_OLDSTYLE */
  550. #if HAVE_OSF_OLDSTYLE
  551. int sys_connect __P((int, const struct sockaddr *, int));
  552. #else
  553. HAVE_PROT_CONNECT_0 sys_connect
  554. __P((HAVE_PROT_CONNECT_1, HAVE_PROT_CONNECT_2, HAVE_PROT_CONNECT_3));
  555. #endif  /* HAVE_OSF_OLDSTYLE */
  556. #if HAVE_OSF_OLDSTYLE
  557. int sys_getpeername __P((int, struct sockaddr *, int *));
  558. #else
  559. HAVE_PROT_GETPEERNAME_0 sys_getpeername
  560. __P((HAVE_PROT_GETPEERNAME_1, HAVE_PROT_GETPEERNAME_2, HAVE_PROT_GETPEERNAME_3));
  561. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  562. #if HAVE_OSF_OLDSTYLE
  563. int sys_getsockname __P((int, struct sockaddr *, int *));
  564. #else
  565. HAVE_PROT_GETSOCKNAME_0 sys_getsockname
  566. __P((HAVE_PROT_GETSOCKNAME_1, HAVE_PROT_GETSOCKNAME_2, HAVE_PROT_GETSOCKNAME_3));
  567. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  568. #if HAVE_OSF_OLDSTYLE
  569. int sys_recvfrom __P((int, void*, int, int, struct sockaddr *, int *));
  570. #else
  571. HAVE_PROT_RECVFROM_0 sys_recvfrom
  572. __P((HAVE_PROT_RECVFROM_1, HAVE_PROT_RECVFROM_2, HAVE_PROT_RECVFROM_3, HAVE_PROT_RECVFROM_4, HAVE_PROT_RECVFROM_5, HAVE_PROT_RECVFROM_6));
  573. #endif
  574. #if HAVE_OSF_OLDSTYLE
  575. ssize_t sys_writev __P((int, struct iovec *, int));
  576. #else
  577. HAVE_PROT_WRITEV_0 sys_writev
  578. __P((HAVE_PROT_WRITEV_1, HAVE_PROT_WRITEV_2, HAVE_PROT_WRITEV_3));
  579. #endif
  580. #if HAVE_OSF_OLDSTYLE
  581. ssize_t sys_sendmsg __P((int, struct msghdr *, int));
  582. #else
  583. HAVE_PROT_SENDMSG_0 sys_sendmsg
  584. __P((HAVE_PROT_SENDMSG_1, HAVE_PROT_SENDMSG_2, HAVE_PROT_SENDMSG_3));
  585. #endif
  586. #if HAVE_OSF_OLDSTYLE
  587. int sys_sendto __P((int, const void *, int, int, const struct sockaddr *, socklen_t));
  588. #else
  589. HAVE_PROT_SENDTO_0 sys_sendto
  590. __P((HAVE_PROT_SENDTO_1, HAVE_PROT_SENDTO_2, HAVE_PROT_SENDTO_3, HAVE_PROT_SENDTO_4, HAVE_PROT_SENDTO_5, HAVE_PROT_SENDTO_6));
  591. #endif /* !HAVE_OSF_OLDSTYLE */
  592. #if HAVE_EXTRA_OSF_SYMBOLS
  593. int sys_Eaccept __P((int, struct sockaddr *, socklen_t *));
  594. int sys_Egetpeername __P((int, struct sockaddr *, socklen_t *));
  595. int sys_Egetsockname __P((int, struct sockaddr *, socklen_t *));
  596. ssize_t sys_Ereadv __P((int, const struct iovec *, int));
  597. int sys_Erecvfrom __P((int, void *, size_t, int, struct sockaddr *, size_t *));
  598. ssize_t sys_Erecvmsg __P((int, struct msghdr *, int));
  599. ssize_t sys_Esendmsg __P((int, const struct msghdr *, int));
  600. ssize_t sys_Ewritev __P((int, const struct iovec *, int));
  601. int sys_naccept __P((int, struct sockaddr *, socklen_t *));
  602. int sys_ngetpeername __P((int, struct sockaddr *, socklen_t *));
  603. int sys_ngetsockname __P((int, struct sockaddr *, socklen_t *));
  604. int sys_nrecvfrom __P((int, void *, size_t, int, struct sockaddr *, size_t *));
  605. ssize_t sys_nrecvmsg __P((int, struct msghdr *, int));
  606. ssize_t sys_nsendmsg __P((int, const struct msghdr *, int));
  607. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  608. #endif /* SOCKSLIBRARY_DYNAMIC */
  609. __END_DECLS