]> git.saurik.com Git - apple/libinfo.git/blobdiff - rpc.subproj/svc_tcp.c
Libinfo-459.40.1.tar.gz
[apple/libinfo.git] / rpc.subproj / svc_tcp.c
index 33e61b81829b49fc6b0a7ca94afa76a61c757427..adeb66d96f745ccc3585effe0b3ba5e1d494404f 100644 (file)
@@ -53,7 +53,7 @@
 #if defined(LIBC_SCCS) && !defined(lint)
 /*static char *sccsid = "from: @(#)svc_tcp.c 1.21 87/08/11 Copyr 1984 Sun Micro";*/
 /*static char *sccsid = "from: @(#)svc_tcp.c   2.2 88/08/01 4.0 RPCSRC";*/
-static char *rcsid = "$Id: svc_tcp.c,v 1.3.84.1 2002/10/18 21:16:15 bbraun Exp $";
+static char *rcsid = "$Id: svc_tcp.c,v 1.6 2004/06/11 16:28:07 majka Exp $";
 #endif
 
 /*
@@ -123,7 +123,11 @@ struct tcp_rendezvous { /* kept in xprt->xp_p1 */
 
 struct tcp_conn {  /* kept in xprt->xp_p1 */
        enum xprt_stat strm_stat;
+#ifdef __LP64__
+       uint32_t x_id;
+#else
        u_long x_id;
+#endif
        XDR xdrs;
        char verf_body[MAX_AUTH_BYTES];
 };
@@ -158,7 +162,7 @@ svctcp_create(sock, sendsize, recvsize)
        register SVCXPRT *xprt;
        register struct tcp_rendezvous *r;
        struct sockaddr_in addr;
-       int len = sizeof(struct sockaddr_in);
+       unsigned int len = sizeof(struct sockaddr_in);
 
        if (sock == RPC_ANYSOCK) {
                if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
@@ -266,13 +270,12 @@ rendezvous_request(xprt)
        int sock;
        struct tcp_rendezvous *r;
        struct sockaddr_in addr;
-       int len;
+       unsigned int len;
 
        r = (struct tcp_rendezvous *)xprt->xp_p1;
     again:
        len = sizeof(struct sockaddr_in);
-       if ((sock = accept(xprt->xp_sock, (struct sockaddr *)&addr,
-           &len)) < 0) {
+       if ((sock = accept(xprt->xp_sock, (struct sockaddr *)&addr, &len)) < 0) {
                if (errno == EINTR)
                        goto again;
               return (FALSE);
@@ -334,43 +337,20 @@ readtcp(xprt, buf, len)
        register int sock = xprt->xp_sock;
        fd_set readfds;
        bool_t ready = FALSE;
-       struct timeval delta, start, tv, tmp1, tmp2;
 
-       delta = wait_per_try;
-       gettimeofday(&start, NULL);
        do
        {
                FD_COPY(&svc_fdset, &readfds);
                FD_SET(sock, &readfds);
-               tv = delta;
-               switch( select(max(svc_maxfd, sock) + 1, &readfds, (fd_set*)NULL, (fd_set*)NULL, &tv) ) {
-               case -1:
-                       if( errno != EINTR )
-                               goto fatal_err;
-                       gettimeofday(&tmp1, NULL);
-                       timersub(&tmp1, &start, &tmp2);
-                       timersub(&wait_per_try, &tmp2, &tmp1);
-                       if( tmp1.tv_sec < 0 || !timerisset(&tmp1) )
-                               goto fatal_err;
-                       delta = tmp1;
-                       continue;
-               case 0:
+               if (select(max(svc_maxfd, sock) + 1, &readfds, NULL, NULL, &wait_per_try) <= 0)
+               {
+                       if (errno == EINTR) continue;
                        goto fatal_err;
-               default:
-                       if(!FD_ISSET(sock, &readfds)) {
-                               svc_getreqset(&readfds);
-                               gettimeofday(&tmp1, NULL);
-                               timersub(&tmp1, &start, &tmp2);
-                               timersub(&wait_per_try, &tmp2, &tmp1);
-                               if( tmp1.tv_sec < 0 || !timerisset(&tmp1) )
-                                       goto fatal_err;
-                               delta = tmp1;
-                               continue;
-                       } else {
-                               ready = TRUE;
-                       }
                }
-
+               else if (FD_ISSET(sock, &readfds))
+               {
+                       ready = TRUE;
+               }
        } while (!ready);
 
        if ((len = read(sock, buf, len)) > 0) return len;
@@ -441,7 +421,7 @@ svctcp_getargs(xprt, xdr_args, args_ptr)
        caddr_t args_ptr;
 {
 
-       return ((*xdr_args)(&(((struct tcp_conn *)(xprt->xp_p1))->xdrs), args_ptr));
+       return ((*xdr_args)(&(((struct tcp_conn *)(xprt->xp_p1))->xdrs), args_ptr, 0));
 }
 
 static bool_t
@@ -454,7 +434,7 @@ svctcp_freeargs(xprt, xdr_args, args_ptr)
            &(((struct tcp_conn *)(xprt->xp_p1))->xdrs);
 
        xdrs->x_op = XDR_FREE;
-       return ((*xdr_args)(xdrs, args_ptr));
+       return ((*xdr_args)(xdrs, args_ptr, 0));
 }
 
 static bool_t